const向量和常量迭代器之间的区别

0 c++ vector c++11

如果我将一个向量传递给函数作为参考,我希望函数不应该修改向量,那么更好 - 使用const vector<>还是使用vector::const_iterator

例如,我正在遍历从传递main()到的向量foo().

void foo (const vector<int> &v1) {
vector<int>::const_iterator m;

for(m=v1.begin();m1!=v1.end();++m1)
//loop body

}
Run Code Online (Sandbox Code Playgroud)

而且main()

int main() {
vector<int> v11={0,1,2,3,4};
foo(v11);
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,v1应该const还是m应该const_iterator

Vit*_*meo 5

如果要阻止foo修改其参数,则应将参数视为const.您将无法constconst引用中获取非迭代器std::vector,因为无法访问非const限定版本std::vector::begin.

另外,我们有一种干净的方式来表达C++ 11中的范围迭代:range- forloops.

void foo(const vector<int> &v1) 
{
    for(const auto& x : v1) { /* use x */ }
}
Run Code Online (Sandbox Code Playgroud)