C++STL vector 용기 접근 요 소 를 설명 하 는 몇 가지 방법

vector 용 기 를 만 들 고 초기 화 하 는 방법 을 배 운 후에 이 절 은 용기 에 저 장 된 요 소 를 어떻게 가 져 오 는 지 계속 배 웁 니 다.
vector 용기 의 단일 요소 에 접근 하기
우선,vector 용 기 는 일반 배열 처럼 저 장 된 요 소 를 방문 할 수 있 으 며,아래 표 시 된 요 소 를 수정 할 수 있 습 니 다.예 를 들 어:

#include <iostream>
#include <vector>
using namespace std;
int main()
{
    vector<int> values{1,2,3,4,5};
    //         
    cout << values[0] << endl;
    //         0      
    values[0] = values[1] + values[2] + values[3] + values[4];
    cout << values[0] << endl;
    return 0;
}
실행 결 과 는:
1
14
분명히 vector 의 색인 은 0 에서 시작 되 는데 이것 은 일반 배열 과 같다.색인 을 사용 하면 항상 vector 용기 에 있 는 요소 에 접근 할 수 있 습 니 다.
특히 용기 이름[n]과 같은 요 소 를 가 져 오 는 방식 은 다음 표 시 된 n 의 값 이 용기 의 용량(capacity()구성원 함수 로 가 져 올 수 있 음)을 초과 하지 않도록 해 야 합 니 다.그렇지 않 으 면 국경 을 넘 어 접근 하 는 오류 가 발생 할 수 있 습 니 다.다행히도 array 용기 와 마찬가지 로 vector 용기 도 at()구성원 함 수 를 제공 합 니 다.at()에 전 달 된 색인 이 경 계 를 넘 을 때 std::out 를 던 집 니 다.of_range 이상.
예 를 들 어:

#include <iostream>
#include <vector>
using namespace std;
int main()
{
    vector<int> values{1,2,3,4,5};
    //         
    cout << values.at(0) << endl;
    //         0      
    values.at(0) = values.at(1) + values.at(2) + values.at(3) + values.at(4);
    cout << values.at(0) << endl;
    //          out_of_range   
    //cout << values.at(5) << endl;
    return 0;
}
실행 결 과 는:
1
14
독자 들 은 왜 vector 용기 가[]연산 자 를 다시 불 러 올 때 경계 검사 기능 을 실현 하지 못 했 는 지 의문 이 있 을 수 있다.성능 때문에 답 은 간단 하 다.요소 에 접근 할 때마다 색인 값 을 검사 하면 비용 이 많이 든다.국경 을 넘 어 방문 할 가능성 이 없 을 때 이런 비용 을 피 할 수 있다.
이 밖 에 도 vector 용 기 는 2 개의 구성원 함수,즉 front()와 back()을 제공 합 니 다.각각 vector 용기 의 첫 번 째 요소 와 마지막 요소 의 인용 을 되 돌려 줍 니 다.이 두 함수 로 되 돌아 오 는 인용 을 통 해 용기 의 첫 번 째 요 소 를 방문 할 수 있 습 니 다.
예 를 들 어:

#include <iostream>
#include <vector>
using namespace std;
int main()
{
    vector<int> values{1,2,3,4,5};
    cout << "values     :" << values.front() << endl;
    cout << "values     :" << values.back() << endl;
    //     
    values.front() = 10;
    cout <<"values       :" << values.front() << endl;
    //     
    values.back() = 20;
    cout << "values       :" << values.back() << endl;
    return 0;
}
출력 결 과 는:
values 첫 번 째 요 소 는:1 입 니 다.
values 끝 요 소 는:5
values 의 새로운 첫 번 째 요 소 는:10 입 니 다.
values 의 새로운 끝 요 소 는:20 입 니 다.
또한,vector 용 기 는 data()구성원 함 수 를 제공 합 니 다.이 함수 의 기능 은 용기 의 첫 번 째 요 소 를 가리 키 는 지침 을 되 돌려 주 는 것 입 니 다.이 지침 을 통 해 용기 의 요 소 를 접근 하거나 수정 할 수 있다.예 를 들 면:

#include <iostream>
#include <vector>
using namespace std;
int main()
{
    vector<int> values{1,2,3,4,5};
    //       3      
    cout << *(values.data() + 2) << endl;
    //       2      
    *(values.data() + 1) = 10;
    cout << *(values.data() + 1) << endl;
    return 0;
}
실행 결 과 는:
3
10
vector 용기 의 여러 요소 에 접근 하기
vector 용기 에 있 는 여러 요 소 를 방문 하려 면 size()구성원 함 수 를 빌 릴 수 있 습 니 다.이 함 수 는 vector 용기 에 실제 저 장 된 요소 개 수 를 되 돌려 줍 니 다.예 를 들 면:

#include <iostream>
#include <vector>
using namespace std;
int main()
{
    vector<int> values{1,2,3,4,5};
    //    0       size()-1  
    for (int i = 0; i < values.size(); i++) {
        cout << values[i] << " ";
    }
    return 0;
}
실행 결 과 는:
1 2 3 4 5
여기 서 capacity()구성원 함 수 를 사용 하지 마 십시오.실제 저장 요소 의 개수 가 아 닌 vector 용기 의 용량 을 되 돌려 주기 때 문 입 니 다.이 두 가 지 는 차이 가 있 습 니 다.
vector 용기 capacity()와 size()의 차이 에 대해 서 는'STL vector 용량(capacity)과 크기(size)의 차이'라 는 글 을 읽 을 수 있 습 니 다.
또는 범위 기반 순환 을 사용 할 수도 있 습 니 다.이 방식 은 용기 에 있 는 요 소 를 하나씩 옮 겨 다 닐 것 입 니 다.예 를 들 면:

#include <iostream>
#include <vector>
using namespace std;
int main()
{
    vector<int> values{1,2,3,4,5};
    for (auto&& value : values)
        cout << value << " ";
    return 0;
}
실행 결 과 는:
1 2 3 4 5
또한 vector 교체 기 를 사용 하여 vector 용 기 를 옮 겨 다 닐 수 있 습 니 다.여 기 는 begin()/end()를 예 로 들 면:

#include <iostream>
#include <vector>
using namespace std;
int main()
{
    vector<int> values{1,2,3,4,5};
    for (auto first = values.begin(); first < values.end(); ++first) {
        cout << *first << " ";
    }
    return 0;
}
실행 결 과 는:
1 2 3 4 5
물론 rbegin()/rend(),cbeg()/cend(),crbegin()/crend()및 전역 함수 begin()/end()를 사용 할 수 있 습 니 다.용기 에 있 는 요소 에 대한 접근 을 실현 할 수 있 습 니 다.
C++STL vector 용기 접근 요 소 를 자세히 설명 하 는 몇 가지 방법 에 관 한 글 을 소개 합 니 다.더 많은 관련 C+STL vector 용기 접근 요소 내용 은 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 도 많은 응원 부 탁 드 리 겠 습 니 다!

좋은 웹페이지 즐겨찾기