v.push_back(<data>)
vector의 최후위에 값을 추가한다.
v.insert(<iterator>, <data>)
vector의 인덱스에 값을 추가한다.
이때 인덱스의 파라미터는 iterator type의 데이터만 받는다.
v.reserve(<data>)
data의 크기 만큼 vector를 재할당한다.
std::vector<int> vec{ 1, 2, 3 };
vec.push_back(10);
vec.insert(vec.begin(), 10);
std::vector<int>::iterator iter = vec.begin();
int* num = &vec[0];
vec[0] = 10;
cout << *iter << endl;
cout << num << endl;
vec.reserve(vec.capacity() + 1);
cout << num << endl;
cout << &vec[0] << endl;
vec.begin() : 10
num : 000002948EDA29A0
num : 000002948EDA29A0
&vec[0] : 000002948EDA3300
위 결과를 봤을 때, vector의 capacity가 재할당되면 vector의 주소가 바뀐다는것을 알 수 있다.
하지만 num의 값은 바뀌지 않는 것을 보아 vector를 가리키는 포인터의 주소는 변하지 않는다는 것을 알 수 있다.
std::deque<type> dq
deque선언
deque.push_back(<data>)
vector의 psuh_back과 동일
deque.push_front(<data>)
deque의 최전위에 data를 추가한다.
vector<int> v;
v.reserve(100);
v.push_back(1);
cout << v[0] << endl;
cout << &v[0] << endl;
v.insert(v.begin(), 10);
cout << v[1] << endl;
cout << &v[1] << endl;
deque<int> nums;
nums.push_back(1);
cout << nums[0] << endl;
cout << &nums[0] << endl;
nums.push_front(10);
cout << nums[1] << endl;
cout << &nums[1] << endl;
1
0000024EA1826B50
1
0000024EA1826B54
1
0000024EA18256F0
1
0000024EA18256F0
실행결과를 봤을 때, deque의 push_front는 vector의 insert와 달리 주소를 변경하지 않는다.
deque는 push_front를 이행할 때 배열을 새로 만들어 추가한다.
deque<int> dp{0, 1, 2, 3};
dp.push_front(10);
위와 같이 dp를 선언했을 때
[0, 1, 2, 3,] 의 배열앞에
[?, ?, ?, 10] [0, 1, 2, 3] 의 형식으로 10이 deque의 최전위로 오게된다.
그렇기 때문에 주소가 변경되지 않고 유지된다.