logo

C++ STL의 벡터

벡터는 요소가 삽입되거나 삭제될 때 자동으로 크기를 조정하고 해당 저장 공간을 컨테이너에서 자동으로 처리하는 기능을 갖춘 동적 배열과 동일합니다. 벡터 요소는 반복자를 사용하여 액세스하고 탐색할 수 있도록 연속 저장소에 배치됩니다. 벡터에서는 데이터가 끝에 삽입됩니다. 때로는 배열을 확장해야 할 수도 있으므로 마지막에 삽입하는 데 차등 시간이 걸립니다. 크기 조정이 발생하지 않기 때문에 마지막 요소를 제거하는 데는 일정한 시간만 걸립니다. 처음이나 중간에 삽입하고 지우는 것은 시간상 선형입니다.

C++에서 std::벡터란 무엇입니까?

표준::벡터 C++에서는 벡터 컨테이너와 해당 멤버 함수를 포함하는 클래스 템플릿입니다. 내부에 정의되어 있습니다. 헤더 파일. std::Vector 클래스의 멤버 함수는 벡터 컨테이너에 다양한 기능을 제공합니다.



C++에서 벡터를 선언하는 구문

  std::vector   vectorName;>

여기서 데이터 유형은 벡터의 각 요소에 대한 데이터 유형입니다. std 네임스페이스를 이미 사용한 경우 std::를 제거할 수 있습니다.

C++에서 벡터 초기화

다음과 같은 방법으로 벡터를 초기화할 수 있습니다.

1. 목록을 사용한 초기화

이 초기화는 선언을 통해 수행됩니다. 여기서는 요소 목록을 벡터 생성자에 전달하여 지정된 요소가 포함된 벡터를 만듭니다.



  vector   name({   value1, value2, value3 ....  });>

2. 초기화 단일 값 사용

이 초기화는 선언을 통해서도 수행됩니다. 여기서는 벡터의 크기를 지정한 다음 벡터의 모든 요소를 ​​해당 값으로 초기화합니다.

  vector   name(size, value);>

삼. 다른 벡터에서 초기화

이 초기화는 other_vec의 정확한 복사본인 벡터를 만드는 데 사용됩니다.

  vector   name(other_vec);>

std::Vector 클래스의 일반적으로 사용되는 일부 멤버 함수는 다음과 같습니다.



반복자

  1. 시작하다() – 벡터의 첫 번째 요소를 가리키는 반복자를 반환합니다.
  2. 끝() – 벡터의 마지막 요소 뒤에 오는 이론적인 요소를 가리키는 반복자를 반환합니다.
  3. rbegin() – 벡터의 마지막 요소를 가리키는 역방향 반복자를 반환합니다(역방향 시작). 마지막 요소에서 첫 번째 요소로 이동합니다.
  4. 세우다() – 벡터의 첫 번째 요소 앞에 있는 이론적인 요소를 가리키는 역방향 반복자를 반환합니다(역방향 끝으로 간주).
  5. cbegin() – 벡터의 첫 번째 요소를 가리키는 상수 반복자를 반환합니다.
  6. 몇() – 벡터의 마지막 요소 뒤에 오는 이론적인 요소를 가리키는 상수 반복자를 반환합니다.
  7. 크르비긴() – 벡터의 마지막 요소(역방향 시작)를 가리키는 상수 역방향 반복자를 반환합니다. 마지막 요소에서 첫 번째 요소로 이동합니다.
  8. 신조() – 벡터의 첫 번째 요소 앞에 있는 이론적인 요소를 가리키는 상수 역방향 반복자를 반환합니다(역방향 끝으로 간주).

C++




// C++ program to illustrate the> // iterators in vector> #include> #include> > using> namespace> std;> > int> main()> {> >vector<>int>>g1;> > >for> (>int> i = 1; i <= 5; i++)> >g1.push_back(i);> > >cout <<>'Output of begin and end: '>;> >for> (>auto> i = g1.begin(); i != g1.end(); ++i)> >cout << *i <<>' '>;> > >cout <<>' Output of cbegin and cend: '>;> >for> (>auto> i = g1.cbegin(); i != g1.cend(); ++i)> >cout << *i <<>' '>;> > >cout <<>' Output of rbegin and rend: '>;> >for> (>auto> ir = g1.rbegin(); ir != g1.rend(); ++ir)> >cout << *ir <<>' '>;> > >cout <<>' Output of crbegin and crend : '>;> >for> (>auto> ir = g1.crbegin(); ir != g1.crend(); ++ir)> >cout << *ir <<>' '>;> > >return> 0;> }>

>

>

산출

Output of begin and end: 1 2 3 4 5 Output of cbegin and cend: 1 2 3 4 5 Output of rbegin and rend: 5 4 3 2 1 Output of crbegin and crend : 5 4 3 2 1>

용량

  1. 크기() – 벡터의 요소 수를 반환합니다.
  2. 최대_크기() – 벡터가 보유할 수 있는 최대 요소 수를 반환합니다.
  3. 용량() – 요소 개수로 표현된 벡터에 현재 할당된 저장 공간의 크기를 반환합니다.
  4. 크기 조정(n) – 'n'개의 요소가 포함되도록 컨테이너의 크기를 조정합니다.
  5. 비어 있는() – 컨테이너가 비어 있는지 여부를 반환합니다.
  6. Shrink_to_fit() – 용기의 용량을 크기에 맞게 줄이고, 용량을 초과하는 모든 구성품을 파기합니다.
  7. 예약하다() – 벡터 용량이 최소한 n개의 요소를 포함하기에 충분하도록 요청합니다.

C++




// C++ program to illustrate the> // capacity function in vector> #include> #include> > using> namespace> std;> > int> main()> {> >vector<>int>>g1;> > >for> (>int> i = 1; i <= 5; i++)> >g1.push_back(i);> > >cout <<>'Size : '> << g1.size();> >cout <<>' Capacity : '> << g1.capacity();> >cout <<>' Max_Size : '> << g1.max_size();> > >// resizes the vector size to 4> >g1.resize(4);> > >// prints the vector size after resize()> >cout <<>' Size : '> << g1.size();> > >// checks if the vector is empty or not> >if> (g1.empty() ==>false>)> >cout <<>' Vector is not empty'>;> >else> >cout <<>' Vector is empty'>;> > >// Shrinks the vector> >g1.shrink_to_fit();> >cout <<>' Vector elements are: '>;> >for> (>auto> it = g1.begin(); it != g1.end(); it++)> >cout << *it <<>' '>;> > >return> 0;> }>

>

Java에서 csv 파일 읽기
>

산출

Size : 5 Capacity : 8 Max_Size : 4611686018427387903 Size : 4 Vector is not empty Vector elements are: 1 2 3 4>

요소 액세스

  1. 참조 연산자 [g] – 벡터의 'g' 위치에 있는 요소에 대한 참조를 반환합니다.
  2. 에서(g) – 벡터의 'g' 위치에 있는 요소에 대한 참조를 반환합니다.
  3. 앞쪽() – 벡터의 첫 번째 요소에 대한 참조를 반환합니다.
  4. 뒤쪽에() – 벡터의 마지막 요소에 대한 참조를 반환합니다.
  5. C++




    // C++ program to illustrate the> // element access in vector> #include> using> namespace> std;> > int> main()> {> >vector<>int>>g1;> > >for> (>int> i = 1; i <= 10; i++)> >g1.push_back(i * 10);> > >cout <<>' Reference operator [g] : g1[2] = '> << g1[2];> > >cout <<>' at : g1.at(4) = '> << g1.at(4);> > >cout <<>' front() : g1.front() = '> << g1.front();> > >cout <<>' back() : g1.back() = '> << g1.back();> > >// pointer to the first element> >int>* pos = g1.data();> > >cout <<>' The first element is '> << *pos;> >return> 0;> }>

    >

    >

    산출

    Reference operator [g] : g1[2] = 30 at : g1.at(4) = 50 front() : g1.front() = 10 back() : g1.back() = 100 The first element is 10>

    수정자

    1. 양수인() – 이전 요소를 대체하여 벡터 요소에 새로운 값을 할당합니다.
    2. push_back() – 요소를 뒤에서 벡터로 밀어 넣습니다.
    3. 팝백() – 벡터의 요소를 뒤에서 꺼내거나 제거하는 데 사용됩니다.
    4. 끼워 넣다() – 지정된 위치의 요소 앞에 새 요소를 삽입합니다.
    5. 삭제() – 지정된 위치나 범위의 컨테이너에서 요소를 제거하는 데 사용됩니다.
    6. 교환() – 한 벡터의 내용을 동일한 유형의 다른 벡터로 바꾸는 데 사용됩니다. 크기는 다를 수 있습니다.
    7. 분명한() – 벡터 컨테이너의 모든 요소를 ​​제거하는 데 사용됩니다.
    8. 자리() – 위치에 새 요소를 삽입하여 컨테이너를 확장합니다.
    9. emplace_back() – 벡터 컨테이너에 새 요소를 삽입하는 데 사용되며 새 요소는 벡터 끝에 추가됩니다.

    C++




    // C++ program to illustrate the> // Modifiers in vector> #include> #include> using> namespace> std;> > int> main()> {> >// Assign vector> >vector<>int>>안에;> > >// fill the vector with 10 five times> >v.assign(5, 10);> > >cout <<>'The vector elements are: '>;> >for> (>int> i = 0; i cout << v[i] << ' '; // inserts 15 to the last position v.push_back(15); int n = v.size(); cout << ' The last element is: ' << v[n - 1]; // removes last element v.pop_back(); // prints the vector cout << ' The vector elements are: '; for (int i = 0; i cout << v[i] << ' '; // inserts 5 at the beginning v.insert(v.begin(), 5); cout << ' The first element is: ' << v[0]; // removes the first element v.erase(v.begin()); cout << ' The first element is: ' << v[0]; // inserts at the beginning v.emplace(v.begin(), 5); cout << ' The first element is: ' << v[0]; // Inserts 20 at the end v.emplace_back(20); n = v.size(); cout << ' The last element is: ' << v[n - 1]; // erases the vector v.clear(); cout << ' Vector size after clear(): ' << v.size(); // two vector to perform swap vector v1, v2; v1.push_back(1); v1.push_back(2); v2.push_back(3); v2.push_back(4); 시합<< ' Vector 1: '; for (int i = 0; i cout << v1[i] << ' '; cout << ' Vector 2: '; for (int i = 0; i cout << v2[i] << ' '; // Swaps v1 and v2 v1.swap(v2); cout << ' After Swap Vector 1: '; for (int i = 0; i cout << v1[i] << ' '; cout << ' Vector 2: '; for (int i = 0; i cout << v2[i] << ' '; }>

    >

    >

    산출

    The vector elements are: 10 10 10 10 10 The last element is: 15 The vector elements are: 10 10 10 10 10 The first element is: 5 The first element is: 10 The first element is: 5 The last element is: 20 Vector size after erase(): 0 Vector 1: 1 2 Vector 2: 3 4 After Swap Vector 1: 3 4 Vector 2: 1 2>

    벡터에 대한 다양한 작업을 수행하는 데 소요되는 시간 복잡도는 다음과 같습니다.

    • 랜덤 액세스 – 상수 O(1)
    • 끝에 요소 삽입 또는 제거 - 상수 O(1)
    • 요소 삽입 또는 제거 - 벡터 O(N)의 끝까지 거리가 선형입니다.
    • 크기 알기 - 상수 O(1)
    • 벡터 크기 조정 - 선형 O(N)

    std::벡터의 모든 멤버 함수

    다음은 C++에서 std::Vector 클래스의 모든 멤버 함수 목록입니다.

    C# 샘플 코드

    벡터 함수

    설명

    push_back()

    벡터의 끝에 요소를 추가합니다.

    팝백()

    벡터의 마지막 요소를 제거합니다.

    크기()

    벡터의 요소 수를 반환합니다.

    최대_크기()

    벡터가 보유할 수 있는 최대 요소 수를 반환합니다.

    크기 조정()

    벡터의 크기를 변경합니다.

    비어 있는()

    벡터가 비어 있는지 확인합니다.

    운영자[]

    알파벳과 숫자
    특정 위치의 요소에 액세스합니다.

    에()

    경계 검사를 통해 특정 위치의 요소에 액세스합니다.

    앞쪽()

    벡터의 첫 번째 요소에 액세스합니다.

    뒤쪽에()

    벡터의 마지막 요소에 액세스합니다.

    시작하다()

    벡터의 첫 번째 요소를 가리키는 반복자를 반환합니다.

    끝()

    벡터의 끝을 지난 요소를 가리키는 반복자를 반환합니다.

    rbegin()

    벡터의 마지막 요소를 가리키는 역방향 반복자를 반환합니다.

    세우다()

    벡터의 첫 번째 요소 이전 요소를 가리키는 역방향 반복기를 반환합니다.

    cbegin

    const_iterator를 처음으로 반환합니다.

    몇 가지

    const_iterator를 끝까지 반환합니다.

    크립긴

    시작을 거꾸로 하려면 const_reverse_iterator를 반환합니다.

    믿다

    반대 끝으로 const_reverse_iterator를 반환합니다.

    끼워 넣다()

    벡터의 특정 위치에 요소를 삽입합니다.

    삭제()

    벡터의 특정 위치나 범위에서 요소를 제거합니다.

    교환()

    벡터의 내용을 다른 벡터의 내용으로 바꿉니다.

    분명한()

    벡터에서 모든 요소를 ​​제거합니다.

    자리()

    벡터에 요소를 생성하고 삽입합니다.

    emplace_back()

    벡터 끝에 요소를 생성하고 삽입합니다.

    양수인()

    이전 값을 대체하여 벡터 요소에 새 값을 할당합니다.

    용량()

    현재 벡터에 할당된 저장 공간의 크기를 반환합니다.

    예약하다()

    벡터 용량이 최소한 지정된 수의 요소를 포함하기에 충분하도록 요청합니다.

    Shrink_to_fit()

    사용하지 않는 공간을 확보하여 메모리 사용량을 줄입니다.

    get_allocator

    벡터와 관련된 할당자 개체의 복사본을 반환합니다.

    읽어야 할 내용:

    • C++에서 벡터에 주어진 요소가 포함되어 있는지 확인하는 방법은 무엇입니까?
    • C++의 벡터에서 특정 요소의 인덱스를 찾는 방법
    • C++에서 벡터 정렬