deque::cbegin 与 deque::assign 在C++中的区别

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函数。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程