기존의 for 문
for(int i=0;i<10;i++){
cout<<arr[i]<<endl;
}
범위 기반의 for 문
for (auto x : arr) {
cout << x << endl;
}
간단하고 편해보이는 범위 기반(base ranged) for문은 기존의 for문을 완벽하게 대체하지는 못한다.
첫번째 차이점은 범위기반 for문에서는 x=arr[i] 로 접근 즉 복사를 하기때문에 index 에대한 정보가 x에는 들어있지 않습니다. 따라서 index로 구분할 수 있는 여러가지 기능을 하기 힘들다.
두번째로는 범위기반for문으로 배열의 정보를 변경할 수 없습니다
즉 조회만 가능하다.
예를 들어서 arr 배열의 모든값을 1씩 증가시키고 싶다면 범위기반의 for문을 사용해서는 변경하기 힘들다. 하지만 변경을 하기위해서 reference를 사용하면 가능하다
#include<iostream>
#include<vector>
using namespace std;
int main(void)
{
vector<int> v;
v.push_back(1); v.push_back(2); v.push_back(3);
v.push_back(4); v.push_back(5); v.push_back(6);
v.push_back(7); v.push_back(8); v.push_back(9); v.push_back(10);
cout << "ex1) 기존의 반복문을 사용했을때." << endl;
cout << "for (vector<int>::iterator iter = v.begin(); iter != v.end(); ++iter)" << endl;
for (vector<int>::iterator iter = v.begin(); iter != v.end(); ++iter)
{
cout << *iter << " ";
}
cout << endl << endl;
cout << "ex2) 범위기반 반복문을 사용했을때." << endl;
cout << "for (int elem : v)" << endl;
for (int elem : v)
{
cout << elem << " ";
}
cout << endl << endl;
cout << "ex3) 기존 반복문에서 원래 데이터 변경 확인" << endl;
for (vector<int>::iterator iter = v.begin(); iter != v.end(); ++iter)
{
*iter += 10;
cout << *iter << " ";
}
cout << endl;
for (vector<int>::iterator iter = v.begin(); iter != v.end(); ++iter)
{
cout << *iter << " ";
}
cout << endl << endl;
cout << "ex4) 범위기반 반복문에서 원래 데이터 변경 확인" << endl;
for (int elem : v)
{
elem += 100;
cout << elem << " ";
}
cout << endl;
for (int elem : v)
{
cout << elem << " ";
}
cout << endl << endl;
system("pause");
return 0;
}
//C++ range based for, reference example.
//BlockDMask.
#include<iostream>
#include<vector>
using namespace std;
int main(void)
{
vector<int> v;
v.push_back(1); v.push_back(2); v.push_back(3);
v.push_back(4); v.push_back(5); v.push_back(6);
v.push_back(7); v.push_back(8); v.push_back(9); v.push_back(10);
cout << "ex1) 범위기반 반복문 reference를 이용한 데이터 변경" << endl;
for (int& elem : v)
{
elem += 100;
cout << elem << " ";
}
cout << endl;
for (int& elem : v)
{
cout << elem << " ";
}
cout << endl << endl;
system("pause");
return 0;
}