Language/C++
vector 사용 시 []연산자와 at() 멤버 함수의 차이
W00gie
2021. 1. 21. 18:25
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> v;
v.push_back(0);
v.push_back(10);
v.push_back(20);
v.push_back(30);
v.push_back(40);
for (vector<int>::size_type i = 0; i < v.size(); ++i)
{
cout << v[i] << " ";
}
cout << endl;
cout << v.at(2) << endl; //at 멤버함수 이용
cout << v[2] << endl; // []연산자 이용
return 0;
}
[]연산자와 at()멤버 함수의 기능과 결과는 같다.
하지만 차이점은 범위 점검을 하는지 안하는지 차이가 있다.
범위 점검이란 흔히 나오는 out of range의 예외처리를 반환여부이다.
이러한 차이점 때문에
[]연산자는 보다 빠른 성능을 보이며 at() 함수는 비교적 속도가 느리고 안전하다.
at함수를 이용해 인덱스밖의 원소를 출력하려 하면 다음과 같은 로그를 확인할 수 있다.
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> v;
v.push_back(0);
v.push_back(10);
v.push_back(20);
v.push_back(30);
v.push_back(40);
for (vector<int>::size_type i = 0; i < v.size(); ++i)
{
cout << v[i] << " ";
}
cout << endl;
try {
cout << v.at(6) << endl; //at 멤버함수에서 out of range 유도
}
catch (out_of_range& e)
{
cout << e.what() << endl;
}
return 0;
}
같은 내용의 코드를 []연산자를 통해 실행시 예외 처리는 지원되지 않는다.