[C++] vector & arrray

2023. 7. 9. 14:52Algorithm/with C++

1. vector

 

#include<iostream>
#include<vector>
using namespace std;

vector<int> v;

int main(){
    for(int i=1; i<=10; i++) v.push_back(i);
    for(int a : v) cout << a << " ";
    cout << endl;
//1 2 3 4 5 6 7 8 9 10

 

...
    v.pop_back();
    for(int a : v) cout << a << " ";
    cout << endl;
//1 2 3 4 5 6 7 8 9
  • v.pop_back(); : 가장 뒤에 요소를 제거한다.

 

...
    v.erase(v.begin(), v.begin() + 3);
    for(int a : v) cout << a << " ";
    cout << endl;
//4 5 6 7 8 9
  • v.erase(v.begin(), v.begin() + 3); : v.begin()부터 v.begin() +3 바로 까지 지운다. v.begin() + 3은 포함하지 않는다.
  • v.erase(v.begin()); : 가장 앞에 요소를 제거한다. 
iterator erase (const_iterator position);
iterator erase (const_iterator first, const_iterator last);

 

...
    auto a = find(v.begin(), v.end(), 100); //string.find()랑은 다른 것이다.
    if(a == v.end()) cout << "not found" << endl;
//not found
  • InputIterator find (InputIterator first, InputIterator last, const T& val);
    : [first,last) 사이의 요소를 탐색해서 val과 같은 값을 가진 첫 번째 iterator를 반환한다.
    : 없으면 last 반환.
    : string.find()랑은 다른 것이다. ← 없으면 string::npos 반환.
  • auto a = find(v.begin(), v.end(), 100); : vector에서 100을 찾고 없으면 lastv.end() 반환.
 

https://cplusplus.com/reference/algorithm/find/

123456789 template InputIterator find (InputIterator first, InputIterator last, const T& val) { while (first!=last) { if (*first==val) return first; ++first; } return last; }

cplusplus.com

 

...
    fill(v.begin(), v.end(), 10);
    for(int a : v) cout << a << " ";
    cout << endl;
//10 10 10 10 10 10
  • fill(v.begin(), v.end(), 10); : [from, to) 구간에 value를 초기화.

 

...
    v.clear();
    cout << "clear!" << endl;
    for(int a : v) cout << a << " ";
    cout << endl;
//clear!
  • v.clear(); : 모든 요소 삭제.

 

...
    //vector static
    vector<int> v1(5, 100);
    //또는
    //vector<int> v1{100, 100, 100, 100, 100};
    cout << "벡터의 정적인 할당" << endl;
    for(int a : v1) cout << a << " "; 
    cout << endl;
    cout << v1.front() << " : " << v1.back() << endl;
    return 0;
}
//벡터의 정적인 할당
//100 100 100 100 100 
//100 : 100

vector도 처음부터 크기를 정해서 특정한 값으로 초기화할 수 있다. 이를 벡터의 정적인 할당이라고 한다.

 

  • vector<int> v1(5, 100);, vector<int> v1{100, 100, 100, 100, 100};
    : int 5개를 100으로 채운다.
  • v.front() : vector의 첫 번째 요소의 reference를 반환한다. v.begin과 달리 iterator가 아닌 reference를 전달한다.
  • v.back() : vector의 마지막 요소의 reference를 반환한다. v.end와 달리 마지막 요소 + 1 iterator가 아닌 마지막 요소의 reference를 반환한다.

 

#include<iostream>
#include<vector>
using namespace std;

//2차원 벡터를 만드는 방법
vector<vector<int>> v;
//10*10 벡터를정적으로  만드는 방법
vector<vector<int>> v2(10, vector<int>(10, 0));

int main(){
    for(vector<int> v : v2){
        for(int i : v) cout << i << ' ';
        cout << endl;
    }
    for(int i=0; i<10; i++){
        vector<int> vv;
        v.push_back(vv);
    }
    return 0;
}
/*
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
 */
  • vector<vector<int>> v; : 2차원 벡터를 만드는 방법
  • vector<vector<int>> v2(10, vector<int>(10, 0)); : 10*10 벡터를 정적으로 만드는 방법

 


2. Array

#include <bits/stdc++.h>
using namespace std; 

int a[3] = {1, 2, 3};
int a2[] = {1, 2, 3, 4};
int a3[10];

int main(){
    for(int i = 0; i < 3; i++) cout << a[i] << " "; 
    cout <<'\n';
    for(int i : a) cout << i << " ";
    cout << '\n';

    for(int i = 0; i < 4; i++) cout << a2[i] << " "; 
    cout <<'\n';
    for(int i : a2) cout << i << " ";
    cout <<'\n';

    for(int i = 0; i < 10; i++) a3[i] = i;
    for(int i : a3) cout << i << " "; 
    return 0;
}

/*
1 2 3 
1 2 3 
1 2 3 4 
1 2 3 4 
0 1 2 3 4 5 6 7 8 9 
*/
#include<iostream>
using namespace std;

int a[3][4];
int main(){
    for(int i=0; i<3; i++){
        for(int j=0; j<4; j++){
            a[i][j] = (i + j);
        }
    }
    for(int i = 0; i<3; i++){
        for(int j=0; j<4; j++){
            cout << a[i][j] << " ";
        }
        cout << endl;
    }
}
/*
0 1 2 3 
1 2 3 4 
2 3 4 5 
*/
  • 2차원 배열

 

23년 8월 31일 추가

const int max_n = 50;
const int max_m = 50;
int a[max_n][max_m], visited[max_n][max_m];

//1번
void dfs(int y, int x, int a[max_m][max_m], int visited[max_n][max_m]){...}
//2번
void dfs(int y, int x, int a[][max_m], int visited[][max_m]){...}

2차원 배열을 매개변수로 할 때는 다음 두 가지 중 하나의 형태로 선언한다.

 

 

23년 11월 15일 추가

 

C++에서는 표준 배열에 대하여 .size.length() 같은 멤버 함수를 제공하지 않는다.

 

굳이 배열의 크기를 구하기 위해선 int n = sizeof(arr) / sizeof(arr[0]);와 같은 방법으로 구할 수 있다.

 

그냥 배열을 선언할 때 배열의 크기를 기억하거나 배열의 크기를 상수로 하드코딩하자.

 


 

'Algorithm > with C++' 카테고리의 다른 글

[C++] 자료구조 시간복잡도 정리  (0) 2023.07.09
[C++] Linked list  (0) 2023.07.09
[C++] sort  (0) 2023.07.08
[C++] fill, memset, memcpy  (0) 2023.07.08
[C++] iterator  (0) 2023.07.08