矢量的开始和开始之间的区别是什么?

成员 开始有两个过载,其中一个是 const_iterator begin() const;。还有 开始 const_iterator cbegin() const noexcept;。它们都将 const_iterator返回到列表的开头。有什么区别吗?

40927 次浏览

begin将返回 iteratorconst_iterator,具体取决于调用它的对象的 const 限定。

cbegin将无条件返回 const_iterator

std::vector<int> vec;
const std::vector<int> const_vec;


vec.begin(); //iterator
vec.cbegin(); //const_iterator


const_vec.begin(); //const_iterator
const_vec.cbegin(); //const_iterator

begin()返回一个 iterator到开始,而 cbegin()返回一个 const_iterator到开始。

这两者之间的基本区别是 iterator(即 begin())允许您更改它所指向的对象的值,而 const_iterator不允许您更改对象的值。

例如:

这是允许的。矢量值改为 {0,10,20,30,40}:

vector<int> v{10,20,30,40,50};
vector<int> :: iterator it;


for (it = v.begin(); it != v.end(); it++)
{
*it = *it - 10;
}

这是不允许的。它会抛出一个错误:

for (it = v.cbegin(); it != v.cend(); it++)
{
*it = *it - 10;
}