[C++11]イテレータとはおさらばforeach |
2014年11月20日07:46:02 |
|
コンテナを回すのに長ったらしいイテレータとはもうおさらばです。
C++11からはforeachを使いましょう! |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| #include <vector>
#include <cstdio>
std::vector<int> vec = { 1, 2, 3, 4, 5 };
for( std::vector<int>::iterator i=vec.begin(); i != vec.end(); ++i )
{
printf( "%d\n", *i );
}
for( int i : vec )
{
printf( "%d\n", i );
} |
普通の配列にも使えます。 |
1
2
3
4
5
6
7
8
| #include <cstdio>
int arr[] = { 1, 2, 3, 4, 5 };
for( int i : arr )
{
printf( "%d\n", i );
} |
中身を書き換えるなら参照に |
1
2
3
4
5
6
| int arr[] = { 1, 2, 3, 4, 5 };
for( int& i : arr )
{
i = 0;
} |
コンテナの中身がオブジェクトの場合は参照をつけておかないと
コピーコンストラクタが走るのでご注意を |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| #include <string>
#include <cstdio>
std::string arr[] = { "a", "b", "c", "d", "e" };
for( std::string i : arr )
{
printf( "%s\n", i.c_str() );
}
for( std::string& i : arr )
{
printf( "%s\n", i.c_str() );
}
for( const std::string& i : arr )
{
printf( "%s\n", i.c_str() );
} |
|