[C++] 벡터

yeseo·2024년 10월 21일

C++

목록 보기
1/3

vector: 객체 목록을 저장하기 위해 C++에서 제공하는 제너릭 클래스


리스트의 한계

  • 리스트를 작성할 시 크기를 꼭 지정해야 하기 때문에 크기가 고정된다는 단점이 있다.
    -> 벡터는 필요한 경우 자동으로 크기를 증가시킬 수 있어 리스트보다 유연함

    만약 목록의 크기가 고정된 경우라면 리스트가, 그렇지 않다면 벡터가 유리하다. 더 빠른 처리가 가능하기 때문이다.


예제 코드

: 벡터를 생성하고 벡터에 요소를 추가, 삭제하는 기본적인 코드이다.

#include <iostream>
#include <vector>
#include <string>

using namespace std;

int main() {
    // 1. 벡터 생성
    vector<int> intVector;

    // 2. 1~10을 저장
    for (int i = 1; i <= 10; i++) {
        intVector.push_back(i);
    }

    // intVector를 출력
    cout << "intVector: ";
    for (int i = 0; i < 10; i++) {
        cout << intVector[i] << ", " ;
    }
    cout << endl ;

    cout << "intVector: ";
    for (int i = 0; i < 10; i++) {
        cout << &intVector[i] << ", " ;
    }
    cout << endl ;

    // 문자열 벡터 생성
    vector<string> strVector;

    // 문자열 저장
    strVector.push_back("A");
    strVector.push_back("B");
    strVector.push_back("C");
    strVector.push_back("D");
    
    // 문자열벡터 출력
    cout << "strVector: ";
    for(unsigned int i = 0; i < strVector.size(); i++) {
        cout << strVector[i] << ", ";
    }
    cout << endl ;

    // 3. 문자열 벡터 중 마지막 요소 삭제
    strVector.pop_back();

    // 4. 문자열 벡터 출력
    cout << "strVector: ";
    for(unsigned int i = 0; i < strVector.size(); i++) {
        cout << strVector[i] << ", ";
    }
    cout << endl ;

    cout << "strVector: ";
    for(unsigned int i = 0; i < strVector.size(); i++) {
        cout << &strVector[i] << ", ";
    }
    cout << endl ;
    

    return 0;
}

0. 실행 결과

intVector: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 
intVector: 0x148606690, 0x148606694, 0x148606698, 0x14860669c, 0x1486066a0, 0x1486066a4, 0x1486066a8, 0x1486066ac, 0x1486066b0, 0x1486066b4, 
strVector: A, B, C, D, 
strVector: A, B, C, 
strVector: 0x1486066d0, 0x1486066e8, 0x148606700,

1. 벡터 생성

vector <자료형> 변수명(크기)
  • 크기는 생략 가능하다

    크기를 생략할 경우에는 메모리가 아직 할당되지 않은 상태이기 때문에 아래와 같은 코드를 작성할 경우 오류가 난다. 아래와 같이 특정 인덱스에 값을 채우고 싶다면 꼭 사전에 크기를 설정해야 한다.


2. 벡터의 마지막 요소 추가

push_back(a)
  • a에는 해당 벡터에 맞는 자료형이 와야 한다

3. 벡터의 마지막 요소 제거

pop_back()

4. 벡터 출력: vector의 size 함수

  • vector 객체에서 size를 반환할 때 반환값의 자료형은 unsigned int이다.

    일부 컴파일러에서는 변수의 자료형을 int로 설정하게 된다면 경고가 발생할 수 있지만, 이 경우 부호 있는 값으로 자동 전환되며, 문제는 발생하지 않는다.


5. 원하는 위치에 요소 추가/삭제

당연히 원하는 요소를 삭제하는 함수가 있을 줄 알고 찾아봤는데 없었다... 이게 충격실화가 아니면 뭘까 그래서 예제를 이용해 내가 원하는 요소를 원하는 위치에 추가하고, 삭제하는 코드를 짜봤다.

  • erase(first, last): first부터 last 전까지 삭제
  • remove(first, last, char): algorithm 라이브러리에 속해있는 함수. 해당 범위 내에 있는 문자 중 char과 같은 문자를 발견하면 그 문자를 가장 뒤로 이동시킴

0개의 댓글