2

を繰り返すことは可能const vector<int>ですか?または、これはとにかく望ましくないでしょうか?

getIntVectorIを返す関数があるvector<int>とすると、次のように繰り返すことができます。

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

しかし、私は次のことを行うことはできません:

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

const私の考えでは、ベクトルを...として宣言しても再作成されないということでした。

4

4 に答える 4

7

C ++ 11を使用している場合は、を使用autoして、コンパイラに初期化から次のように型を推測させることができます。

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

ただし、C ++ 03では、を使用する必要がありますconst_iterator

于 2012-07-08T19:32:54.920 に答える
7

vector<int>::const_iterator1) 「const」コンテナを反復処理する必要があります

2)ベクターは引き続きコピーされます。これは望ましい場合とそうでない場合があります。私は参照を返すのが好きです...

于 2012-07-08T19:30:07.787 に答える
5

vector<int>::const_iterator代わりに使用してください。

于 2012-07-08T19:28:45.540 に答える
4

を使用できますvector<int>::const_iterator

于 2012-07-08T19:29:14.627 に答える