범위 기반 for문의 차이점

박세건·2023년 3월 26일
0

기존의 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;
}

출처

profile
멋있는 사람 - 일단 하자

0개의 댓글