成员 开始有两个过载,其中一个是 const_iterator begin() const;。还有 开始 const_iterator cbegin() const noexcept;。它们都将 const_iterator返回到列表的开头。有什么区别吗?
const_iterator begin() const;
const_iterator cbegin() const noexcept;
const_iterator
begin将返回 iterator或 const_iterator,具体取决于调用它的对象的 const 限定。
begin
iterator
cbegin将无条件返回 const_iterator。
cbegin
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到开始。
begin()
cbegin()
这两者之间的基本区别是 iterator(即 begin())允许您更改它所指向的对象的值,而 const_iterator不允许您更改对象的值。
例如:
这是允许的。矢量值改为 {0,10,20,30,40}:
{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; }