#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;
}
같은 내용의 코드를 []연산자를 통해 실행시 예외 처리는 지원되지 않는다.
'Language > C++' 카테고리의 다른 글
int 변수의 앞자리가 0인 경우, 0123 = 83 ? Int prefix (0) | 2021.02.03 |
---|---|
Vector - Array와의 차이점과 쓰임새 (0) | 2021.01.22 |
함수 객체와 그 활용성에 관하여 (0) | 2021.01.06 |
연산자 오버로딩과 주의할 점 (0) | 2020.12.23 |
인라인 함수와 매크로 함수 (0) | 2020.11.20 |