ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • <vector>, <queue>, <string>
    코테/c++ 2023. 2. 22. 22:53

     

    # include <vector>

    백터 임포트

     

    vector<int> v;
    vector<int> v(5); -> (0,0,0,0,0)
    vector<int> v(5,2); -> (2,2,2,2,2)
    vector<int> v = {1,2,3,4,5};
    
    vector<int> v; //전역변수
    v = vector<int>(3); //메인함수

    벡터 선언

    *벡터는 미리 크기를 선언할 필요 없지만

    v[1] = 3; 이런 식으로 값을 넣으려면 v[1]이 선언되어있어야 함

     

    vector<vector<int>> v;
    
    vector<vector<int>> v(3, vector<int>(5,0));
    *v[0][0]~v[2][4] 접근 가능
    
    vector<vector<int>> v(3);
    *v[2].push_back()만 가능

    2차원 벡터 선언 및 할당

     

    vector<pair<int,int>> v;
    v.push_back({1,2});
    int one = v.back().first;
    int two = v.back().second;

    pair를 사용한 벡터 선언

     

    vector<int,pair<int,int>> v; // 오류
    vector<pair<int,pair<int,int>>> v; // 정답

    {1,{2,3}} 과 같은 형태의 벡터도 2번의 pair를 써야함. 주의

     

     

    vector<int> v2(v1);

    벡터 복사

     

     

    v.front(); -> 첫번째 값
    v.back(); -> 마지막 값
    v.push_back(7); -> 맨 끝에 값 추가
    v.pop_back(); -> 마지막 값 제거

    front는 첫번째 값 // begin은 첫번째 값의 주소를 가리키는 포인터

    back은 마지막 값 // end는 마지막 값의 "다음" 칸 주소를 가리키는 포인터

     

     

     int max = *max_element(v.begin(), v.end());
     int min = *min_element(v.begin(), v.end());

    벡터의 최대값 최소값

     

     

    sort(v.begin(), v.end());
    reverse(v.begin(), v.end());

    벡터 정렬 + 거꾸로(=역정렬)

    두 함수는 <algorithm>을 include 해줘야한다

     

    bool compare(int a, int b){ return a>b; }
    
    sort(v.begin(), v.end(), compare);

    a>b 

    앞이 뒤보다 클 경우 -> true 리턴 -> 앞이 뒤보다 크게 정렬  = 역정렬

    앞이 뒤보다 작을 경우 -> false 리턴 -> 뒤가 앞보다 크지만 둘이 바뀜 = 역정렬

     

    bool cmp(vector<int> &v1, vector<int> &v2){
      if(v1[1] == v2[1])
        return v1[0]<v2[0];
      else return v1[1]<v2[1];
    }
    
    sort(v.begin(), v.end(), cmp);

    2차원 벡터에서 n번쨰 항을 기준으로 정렬하는 예제

     

     

    v.erase(unique(v.begin(), v.end()), v.end());

    중복 제거

    unique: 벡터에 "연속된" 중복값이 있을 경우 해당 값을 뒤로 옮긴다 = 정렬되어 있어야 함

    erase: 주어진 범위를 지운다. unique는 뒤로 보내진 중복 값의 시작 주소를 리턴한다.

     

     

    v.size(); -> 원소 개수 리턴
    v.empty(); -> 비어있으면 true 리턴
    v.insert(2,3); -> 2번째 위치에 값 '3' 삽입
    v.insert(2,3,4); -> 2번째 위치에 값 '4'를 3개 삽입
    v.erase(iter); -> iter가 가리키는 원소 제거
    v.clear(); -> 벡터 초기화

    그 외 메소드

     

    for (auto i:v){
      cout<<i;
    }

    벡터 반복문

    오른쪽 방식이 코드는 간결하지만 속도는 큰 차이 없는듯

     

    for(int i=0 ; i<v.size() ; i++){}
    
    v.size = vv;
    for(int i=0 ; i<vv ; i++){}

    반복문 내에서 벡터의 크기가 변경될경우 v.size() 값도 실시간으로 변경된다.

    오류 방지를 위해 따로 변수를 두는게 좋음.

     

     

     

     

    #include <queue>

    큐 임포트

     

    queue<int> q;
    queue<pair<int,int>> q;

    큐 선언

    큐는 출력이 ㅈ같으므로 개수로 상태 확인!

     

    q.push(1);
    q.pop();
    q.front();
    q.back();
    q.size();
    while(!q.empty())

    큐 함수

     

     

    #include <string>

    스트링 임포트

     

    string str = "abcdef";
    string str2(str);

    스트링 선언 & 복사

    str.clear()

    문자열 초기화

    str.find("abcd");
    
    if (str.find("a") != string::npos) { cout << "Found!";}
    else { cout << "Not found"; }

    string 속에서 특정 문자열 찾기

    찾으면 해당 문자열의 시작 주소를,

    못찾으면 string::npos를 리턴한다

     

    int pos = 0;
    int counts = 0;
    while (word.find(str, pos) != std::string::npos) {
        counts ++;
        pos += word.find(str, pos) + str.length();
    }

    특정 문자열이 몇개 있는지 탐색

    find(a,b)는 a 문자열이 b 위치부터 몇개 있는지 탐색하며

    b는 b + 찾았을 때 해당 문자열 시작 주소값 + 찾은 문자열 길이 이다

     

    int t=7;
    string str = "7="+to_string(t);

    스트링에 다른 타입 넣기

    반대는 stoi()

    str.substr(7); -> 7번째부터 끝까지 반환
    str.substr(7,3); -> 7~9
    str.compare(str2); -> 같으면 0
    str.append(str2); -> str1+=str2

    스트링 함수

     

     

     

    +

    string으로 "12"가 주어졌다면

    string[0]은 1이 아닌 "1" = 49이다.

    (int)string[0]도 마찬가지

     

    +

    6 10 2 777이 주어졌을때

    int면 작은 순서대로 - 2 6 10 777

    string이면 사전 순서대로 10 2 6 777

    '코테 > c++' 카테고리의 다른 글

    스플릿 함수  (0) 2023.06.27
    시행착오  (0) 2023.06.19
    CS50 강의 간단 정리  (0) 2023.06.18
    소수점 처리  (0) 2023.03.02
    DFS & BFS  (0) 2023.02.23
Designed by Tistory.