티스토리 뷰

프로그래밍/C&&C++

vector::push_back

Hading 2017. 10. 14. 21:35


vector::push_back



 백터 끝에 원소를 추가한다.

현재의 마지막 원소 뒤에 새로운 원소를 추가하며, 그 원소의 값은 x의 복사본으로 초기화 된다.


이 함수는 효과적으로 벡터의 크기를 1 늘리는데, 만일 capacity와 벡터 size가 같다면 내부적으로 재할당이 일어나게 된다. 이 때 이전에 사용되었던 반복자(iterator), 레퍼런스, 포인터들은 사용할 수 없게 된다.




void push_back(const T& x);


  • 인자 : x
새로 추가 될 원소에 복사 될 원소
T는 벡터에 저장되어있는 원소들의 타입이다.

  • 리턴값 : 없음
만일 재할당이 발생한다면 이는 Allocator::allocate() 를 이용해서 수행되는데, 예외를 던질(throw) 수 있다. (디폴트 할당자의 경우 만일 요청한 할당이 성공하지 않을 경우 bad_alloc이 던져진다.)

  • 예제
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <vector>
using namespace std;
 
int main ()
{
    vector<int> myvector;
    int myint;
 
    cout << "Please enter some integers (enter 0 to end):\n";
 
    do 
    {
        cin >> myint;
        myvector.push_back (myint);
    } while (myint);
 
    cout << "myvector stores " << (int) myvector.size() << " numbers.\n";
 
    return 0;
}
 


cs


vector에서 push_back()과 인덱스[i] 사용 시 주의할 점.




vector를 사용하면서 item 추가 시, 흔히 사용하는 방법은 push_back()이다.


그러나 배열과 같이 직접 접근할 수도 있다. 예를 들면 vec[0] 이런식.
push_back()은 vector를 정의하고 난 후 따로 메모리를 잡지 않아도 item을 추가할 수 있다.

ex) vec.push_back(item);그러나 인덱스로 접근해서 item을 저장하고자 할 경우, item의 개수를 선언해서 메모리를 미리 정해 줘야만 한다. 그렇지 않으면 실행에러가 생긴다.


만약, 처음에 벡터의 사이즈를 정해주지 못했다면, 나중에 resize() 함수를 통해 재조정할 수도 있다.

즉, 위의 말을 코드로 정리하면 아래 코드와 같다.


vector<int> vec;

vec[0] = 3; (X) <-- vec 객체의 메모리를 할당하지 않았기 때문에 실행 에러남.

vec.push_back(3); (O)

---------------------------------------------

vector<int> vec(4); <-- vec 객체에 4개의 item에 대한 메모리를 정해줌.

vec[0] = 3; (O) <--- 인덱스 접근은 OK.

vec.push_back(2); (O)




'프로그래밍 > C&&C++' 카테고리의 다른 글

memcmp 두개의 메모리 변수에 대한 내용 비교  (0) 2017.03.29
포인터  (0) 2017.03.09
삼항연산자  (0) 2016.11.21
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
TAG
more
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함