#15596
vector (class)
vector를 생성하면 메모리 heap에 생성되며 동적할당된다.
array와의 가장 큰 차이점은 array는 크기가 컴파일할 때 결정되므로
후에 원소를 추가하거나 삭제하는 것이 불가능하며 무조건 스택 메모리를 사용해야하지만,
vector는 크기가 동적으로 변한다. 가변 크기의 데이터 컨데이너가 바로 vector이다.
vector는 메모리를 재할당하는 데 용이하지만, 포인터를 통한 접근이기 때문에 속도가 느리다.
vector를 사용해야할 case
- 저장할 데이터의 개수가 정해지지 않은 경우(가변의 경우)
- 데이터 접근의 랜덤 엑세스가 필요한 경우
- 중간에 데이터 삽입이나 삭제가 일어나지 않는 경우
배열 기반 컨테이너이기 때문에 push_front(), pop_front()는 지원하지 않는다.
vector 초기화
vector <자료형> 변수명
: 변수를 생성
vector <자료형> 변수명 (숫자)
: 숫자만큼 벡터 생성 후 0으로 초기화
vector <자료형> 변수명 = { 변수1, 변수2, 변수3,,,}
: { ... } 괄호 안 변수값들로 벡터 초기화
vector <자료형> 변수명 [ ] = { , }
: 벡터 배열(2차원 벡터) 선언 및 초기화(열은 고정, 행은 가변)
vector < vector <자료형> > 변수명
: 2차원 벡터 생성 (열과 행 모두 가변)
vector <자료형> 변수명.assign( 범위, 초기화 값 )
: 벡터의 범위 내에서 해당 값으로 초기화
vector Iterators
v.begin() | 벡터 시작점의 주소 값 반환 |
v.end() | 벡터 (끝부분 + 1 )의 주소값 반환 |
v.rbegin() | (revers begin) 벡터의 끝 지점을 시작점으로 반환 |
v.rend() | (revers end) 벡터의 (시작+1) 지점을 끝 부분으로 반 |
vector 사용 예시
int main() {
//크기가 0인 벡터
vector<int> v1;
//초기값 설정으로 크기가 정해진 벡터
vector<int> v2 = { 1,2,3,4,5 };
//크기가 정해진 벡터
vector<int> v3(10);
//크기와 초기화값이 정해진 벡터
vector<int> v4(10, 1);
//vetor 값 출력하기
cout << v2.at(0);
cout << v2[0];
return 0;
}
&(reference)사용
- 변수는 메모리 공간에 이름을 붙이는 것이고, 레퍼런스는 이름을 지니고 있는 메모리 공간에
별명을 하나 더 지어주는 것이다.
- 레퍼런스 값에는 상수가 올 수 없고, 변수 이름이 와야한다.
[ex] int &b = 10; (x)
int &b = a; (o)
- 레퍼런스는 선언과 동시에 초기화되어야 한다.
reference 예시
int a = 5;
int& b = a;
cout << a << endl;
cout << b << endl;
cout << &a << endl;
cout << &b << endl;
b는 a의 메모리 공간에 별명이 된다. 별명을 선언해줄 때에는 &를 통해 a의 또다른 이름임을 설명한다.
선언할 때에는 &를 포함하여 선언하였으나 결론적으로 a와 b모두 동일한 공간을 나타내고 있으므로
&를 통해 주소값을 출력 때 아래와 같이 동일한 결과값을 낸다.
15596
#include <vector>
using namespace std;
long long sum(vector<int>& a) { //합을 구해야하는 정수 n개가 저장된 배열(벡터)
long long ans = 0; // a에 포함되어 있는 정수들의 합
for (int i = 0;i < a.size();i++) {
ans += a[i];
}
return ans;
}
문제는 어렵지 않았으나 vector의 개념을 이해하는 데에 시간이 많이 걸렸다.
인자로 들어온 vector에 대하여 size()함수를 통해 벡터 크기를 파악한 후,
for문을 통해 index에 차례로 접근하며 ans에 값을 더해주었다.
'Coding > Step By Step' 카테고리의 다른 글
Baekjoon Training / string / #1110 (1) | 2023.02.06 |
---|---|
Baekjoon Training / Algorithm(math) / vector / #11720 (0) | 2023.02.05 |
Baekjoon Training / recursion(재귀) / #10872 (0) | 2023.02.04 |
Baekjoon Training / string / find / #10809 (3) | 2023.02.02 |
Baekjoon Training / Algorithm(math) / #2753 (0) | 2023.01.26 |