二次元のstd::vectorについて、
一次元目のサイズを宣言時に決定し、二次元目をループ内でresizeしようとしています。
- 従来のfor(;;)を用いた場合
- 範囲ベースfor(auto: )を用いた場合
どちらのループを用いても実質は変わらないと今まで考えていました。
しかし、下記のコードに書き込んでいるように、実際は結果が異なっています。
なぜこのような挙動の違いがあるのでしょうか?
範囲ベースfor文は従来のfor文を改良したものという解釈は誤っているのでしょうか?
C++
1#include <cstdlib> 2#include <iostream> 3#include <vector> 4 5int main( int argc, char **argv ) { 6 7 std::vector< std::vector< int > > vector1( 10 ); 8 std::vector< std::vector< int > > vector2( 10 ); 9 10 for( int i = 0; i < vector1.size(); i++ ) { 11 vector1[ i ].resize( 10, 0 ); 12 } 13 for( auto vec : vector2 ) { 14 vec.resize( 10, 0 ); 15 } 16 17 std::cout << vector1[ 0 ].size() << std::endl; // Output: 10 18 std::cout << vector2[ 0 ].size() << std::endl; // Output: 0 19 20 system( "PAUSE" ); 21 return EXIT_SUCCESS; 22}
なお、私の実行環境は以下の通りです。
- Windows 10 64bit
- Visual Studio Community 2015
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/06/21 04:04