다른 글
목적
2차원 벡터의 모든 원소를 Range-based for loop를 이용하여 출력
Range-based for loop는 C++11부터 지원한다.
구현
테스트를 위한 벡터 생성
vector<vector<int>>v; void makeVector() { v.resize(5); for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) { v[i].push_back(i*10 + j); } } }
위와 같이 코드를 작성하면 아래와 같은 5X5 벡터를 만들 수 있다.
0 | 1 | 2 | 3 | 4 |
10 | 11 | 12 | 13 | 14 |
20 | 21 | 22 | 23 | 24 |
30 | 31 | 32 | 33 | 34 |
40 | 41 | 42 | 43 | 44 |
Range-based for loop를 이용한 벡터 원소 출력
int main() { makeVector(); for (auto i : v) { // 행 이동 for (auto j : i) { // 열 이동 cout << j << " "; } cout << endl; } }
Range-based for loop 역시 일반적인 이중 for문과 원리는 동일하다. 외부 for문은 2차원 벡터를 1행부터 5행까지 차례로 선택하고 내부 for문은 선택된 행에서 1열부터 5열까지 차례로 선택한다.
그리고 for (auto i : v) 에서 i는 벡터이므로 i[idx]를 이용한 원소 직접 참조가 가능하다.
// 2열 출력 int main() { makeVector(); for (auto i : v) { cout << i[1] << " "; } }
전체코드
#include <iostream> #include <cstdio> #include <vector> using namespace std; vector<vector<int>>v; void makeVector() { v.resize(5); for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) { v[i].push_back(i*10 + j); } } } int main() { makeVector(); for (auto i : v) { for (auto j : i) { cout << j << " "; } cout << endl; } }