헤더파일과 벡터 선언

반드시 namespace 작성해야 함

#include <vector>

using namespace std;


vector<type> vectorName;

vector<type> vectorName(size);

vector<type> vectorName(size, initialize values); //vector<int> a(5,1) → a[5] = {1, 1, 1, 1, 1};

vector<type> vectorName(vector);



벡터 멤버함수


벡터에 새로운 내용 할당

void assign(InputIterator first, InputIterator last);

void assign(size_type n, const T& u);

벡터 객체에 이전에 있었던 원소들은 모두 삭제하고, 인자로 받은 새로운 내용을 집어 넣는다.

첫번째 형태의 함수의 경우 first부터 last까지에 있는 원소들의 내용이 벡터에 들어가게 된다. (first부터 last 바로 직전 원소까지) 물론, 원래 벡터에 있었던 원소들은 삭제된다.

두번째 형태는 원래 내용을 다 지우고 원소 u를 n개 가지는 벡터로 만든다.


벡터끼리 데이터 교환

vectorA.swap(vectorB);


벡터 내 특정 원소 삭제

벡터의 자료형과 이터레이터의 자료형은 일치해야 한다.

vector<type> itemset;

vector<type>::iterator i;

for(i=itemset.begin(); i != itemset.end(); i++) {

     itemset.erase(i);

}


벡터 정렬하기

#include <algorithm>

sort(vectorName.begin(), vectorName.end());


벡터 역순으로 정렬하기

아래의 두 코드는 완전히 같은 결과를 발생시킨다.

reverse(vecterA.begin, vecterA.end);

sort(vecterA.begin,vecterA.end)


sort(vecterA.rbegin, vecterA.rend);


벡터 메모리해제

for(int i=0; i<vectorName.size(); i++)

     delete &vectorName[i];


메모리 누수를 막는 함수

_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);



예제코드
#include <vector> //vector선언. 밑의 std를 사용해야 쓸수있다.
#include <algorithm> // algorithm 선언. 밑의 std를 사용해야 쓸수있다.
#include <iostream> // iostream
using namespace std; // std 사용 (필수!!)
void main()
{
vector<int> a; // a라는 벡터를 선언한다. vector<자료형>이름;(무조건 0으로 초기화된다.)
vector<int> b; // b라는 벡터는 건들지 말자.. 밑에서 쓸데가 있다.

/* cf) 벡터는 배열과 비슷한 개념이지만, 사용이 편하고 크기를 자유자재로 늘리고 줄일수 있는 신세대(?) 배열입니다. 배열의 장점과 연결리스트의 장점을 모아놓은 거라고 할수 있죠 */
for(int i=1; i<=10; i++)
    a.push_back(i); // 벡터에 [i]번째에 i를 넣습니다. 출력해보면 1,2,3,4,5,6,7,8,9,10이라고 되있겠죠..

for(i=0; i<a.size(); i++)//size()는 char의 strlen이 integer,float,등 모든 자료형에 적용된, vector만 있는 편리한 함수죠..
    cout <<a[i] << " "; // 배열처럼 사용가능

cout << endl;
sort(a.rbegin(), a.rend());//내림차순 정렬 r이 붙으면 거꾸루의 의미다. begin,end는 밑에 설명한다. sort,reverse는 위에 선언했던 algorithm이 필요하다.

for(i=0; i<a.size(); i++)
    cout << a[i] << " "; // 배열처럼 사용가능

cout << endl;
sort(a.begin(), a.end()); //오름차순 정렬. begin함수는 시작위치 포인터를 리턴, end함수는 끝 포인터를 리턴한다.
for(i=0; i<a.size(); i++) 
    cout<<a[i]<<" ";

cout << endl;

// 또, 정수,소수,문자열.. 전부 뒤집는 reverse함수까지~
reverse(a.begin(),a.end());//reverse(뒤집는위치 시작점,끝점), 즉, begin,end를 넣으면 전체가 뒤집힌다.
for(i=0; i<a.size(); i++) 
    cout<<a[i]<<" "; 

cout << endl;

vector<int>::iterator iter = a.begin(); // iterator라는 개념으로 위치 포인터를 쉽게 받을수있다.
vector<int>::iterator iten = a.begin();
iter++;
iten+=4;
a.erase(iter, iten); // a[2]부터 a[5]까지 삭제. 그리고 그부분이 0으로 초기화되는게 아니라 뒤의 배열들이 a[2]쪽으로 밀려오는것을 볼수있다. 이것도 직접 프로그래밍하려면 골때리겠지.. 참 편리하다고 말하지 않을수 없다.
for(i=0; i<a.size(); i++) 
    cout<<a[i]<<" "; 

cout<<endl;
cout<<a.empty()<<"\t"<<b.empty<<endl;
// empty는 그 벡터가 비어있으면 true를, 아니면 false를 리턴하므로 비었는지 안비었는지 알수있다.

a[5] = 16; // 배열처럼 접근가능
for(i=0; i<a.size(); i++) 
    cout<<a[i]<<" "; // 16이 꼽사리 낀걸 볼수 있다.
cout<<endl;
}



References