deque::cbegin 与 deque::assign 在C++中的区别
deque容器简介
deque是C++ STL提供的双端队列容器,其可以在队首和队尾快速插入和删除元素,但相对于vector而言,deque的内存分布相对分散,也并不保证连续存储。
deque 需要调用std::deque头文件才能使用。使用 deque 时,我们需要为其指定数据类型。例如,下面创建了一个数据类型为int的deque:
std::deque<int> myNumbersDeque;
此时myNumbersDeque便是一个空的双端队列,我们可以通过push_front()和push_back()等方法向myNumbersDeque里添加元素。
deque::cbegin
deque::cbegin用于返回一个指向容器中第一个元素(在deque中被视为尾部元素)的迭代器。该迭代器为const_iterator类型,表示该迭代器只读,不允许更改元素。
下面是一个使用deque::cbegin返回迭代器的例子:
std::deque<int> myDeque;
myDeque.push_front(1);
myDeque.push_front(2);
myDeque.push_front(3);
std::deque<int>::const_iterator it = myDeque.cbegin(); // 获取deque第一个元素迭代器
在上述代码中,由于使用了cbegin(),因此myDeque中的元素将不会被更改。
deque::assign
deque::assign用于将若干个元素赋值给deque。该函数的参数有很多种形式,如:
- assign(InputIterator first, InputIterator last)
- assign(size_type n, const value_type& val)
- assign(std::initializer_list
ilist)
如果我们想将一系列数组或者容器中的元素赋值给deque,可以使用assign(InputIterator first, InputIterator last)的方法,下面是一个例子:
std::vector<int> myVector = {1, 3, 5, 7, 9};
std::deque<int> myDeque;
// 将myVector中的元素赋值给myDeque
myDeque.assign(myVector.begin(), myVector.end());
在该例子中,由于assign()并没有使用const_iterator迭代器,因此myDeque中的元素可以被更改。
区别对比
从上文的描述中,我们可以知道deque::cbegin和deque::assign两者之间的区别。
区别如下:
- deque::cbegin获取的是第一个元素的不可更改const_iterator迭代器,不能更改元素;
- deque::assign将一系列元素赋值给deque,可以更改元素。
总结
在C++ STL中,deque是一个非常实用的双端队列容器。而deque::cbegin和deque::assign是deque常用的STL函数,其中deque::cbegin返回一个指向第一个元素的const_iterator迭代器,而deque::assign将一系列元素赋值给deque并可以更改元素。在使用deque时需要根据需求正确选择STL函数。