是否可以迭代`const vector <int>`?

Ros*_*oss 2 c++ std

是否可以迭代const vector<int>?或者,这会不会是不受欢迎的吗?

鉴于我有一个getIntVector返回的函数,vector<int>我可以使用以下代码迭代它:

vector<int> vec = getIntVector();
vector<int>::iterator it;
for (it=vec.begin();it!=vec.end();++it) {} 
Run Code Online (Sandbox Code Playgroud)

但我不能做到以下几点:

const vector<int> vec = getIntVector();
vector<int>::iterator it;
// complier throws error below
for (it=vec.begin();it!=vec.end();++it) {} 
Run Code Online (Sandbox Code Playgroud)

我的想法是,通过将它声明为const...... 来重新创建向量.

Chr*_*ber 7

1)你需要一个vector<int>::const_iterator迭代"const"容器

2)你的矢量仍然会被复制; 这可能是也可能不是可取的.我想退回参考资料......


Naw*_*waz 7

如果您正在使用C++ 11,则可以使用auto,并让编译器从初始化推断出类型:

for (auto it=vec.begin(); it!=vec.end(); ++it) 
   //^^^^ compiler will infer the type using the initialization expression
Run Code Online (Sandbox Code Playgroud)

但是,在C++ 03中,您必须使用const_iterator.

  • 或者只是`for(int i:getIntVector())`如果你根本不关心`it`而只想快速迭代. (2认同)