[C++, STL] 2차원 벡터(vector)의 range-based for loop 사용

다른 글

[C++, STL] 2차원 벡터 만들기

목적

2차원 벡터의 모든 원소를 Range-based for loop를 이용하여 출력

Range-based for loop는 C++11부터 지원한다.

구현

테스트를 위한 벡터 생성

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
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);
}
}
}
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); } } }
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 벡터를 만들 수 있다.

01234
1011121314
2021222324
3031323334
4041424344

Range-based for loop를 이용한 벡터 원소 출력

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
int main() {
makeVector();
for (auto i : v) { // 행 이동
for (auto j : i) { // 열 이동
cout << j << " ";
}
cout << endl;
}
}
int main() { makeVector(); for (auto i : v) { // 행 이동 for (auto j : i) { // 열 이동 cout << j << " "; } cout << endl; } }
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]를 이용한 원소 직접 참조가 가능하다.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
// 2열 출력
int main() {
makeVector();
for (auto i : v) {
cout << i[1] << " ";
}
}
// 2열 출력 int main() { makeVector(); for (auto i : v) { cout << i[1] << " "; } }
// 2열 출력

int main() {
	makeVector();
	
	for (auto i : v) {
		cout << i[1] << " ";
	}
}

전체코드

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
#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;
}
}
#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; } }
#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;
	}
}

Leave a Comment