더북(TheBook)

2.3.3 원소에 접근하기

[인덱스]로 기존 원소의 값을 설정하거나 표현식에서 현재 값을 사용할 수 있다.

std::vector<double> values(20);          // 원소 20개로 생성된 컨테이너
values[0] = 3.14159;                     // 파이 값
values[1] = 5.0;                         // 원의 반지름
values[2] = 2.0*values[0]*values[1];     // 원주

vector의 인덱스 값은 표준 배열과 마찬가지로 0부터 시작한다. [] 사이에 인덱스를 사용해서 항상 원소에 접근할 수 있지만, 이 방식으로 새 원소를 생성할 수는 없다. 새 원소를 추가할 때는 반드시 push_back(), insert(emplace(), emplace_back()을 사용해야 한다. vector를 이렇게 인덱스로 사용할 때 인덱스 값은 검사되지 않는다. 즉, [인덱스]를 사용해서 배열을 벗어난 메모리에 접근하거나 값을 저장할 수 있다. vector 객체에는 경계 검사를 하는 at() 함수가 있다. at() 함수는 array 컨테이너와 같다. 따라서 인덱스가 적법한 범위를 벗어날 가능성이 있다면 원소를 참조할 때 at() 함수를 사용해라.

vectorfront()back() 함수 멤버는 순차열의 첫 번째 원소와 마지막 원소를 반환한다.

std::cout << values.front() << std::endl;     // 3.14159를 출력한다

front()back() 함수 멤버는 참조를 반환하므로 할당문의 왼쪽에 쓸 수 있다.

values.front() = 2.71828;     // 첫 번째 원소를 2.71828로 변경한다

data() 함수 멤버는 vector 내부에서 원소를 저장하는 배열에 대한 포인터를 반환한다.

auto pData = values.data();

pData의 타입은 double*이 되고, 일반적으로 data()vector<T> 컨테이너의 T* 타입의 값을 반환한다. data()는 사용할만한 이유가 있을 때만 사용해야 한다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.