[C++] vector & arrray
2023. 7. 9. 14:52ㆍAlgorithm/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.push_back(i);
: 가장 뒤에 요소를 추가한다.- vector 뒤에 vector를 이어 붙이고 싶으면 vector.insert() 사용. https://cplusplus.com/reference/vector/vector/insert/
...
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을 찾고 없으면last
인v.end()
반환.
...
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 |