[C++] vector

임승섭·2023년 6월 29일
0

C++

목록 보기
1/4

vector 선언

/*1차원 vector*/
// 1. 크기 없는 경우
vector<int> v;

// 2. 크기 있고, 데이터 초기화x
vector<int> v(10);

// 3. 크기 있고, 데이터 초기화
vector<int> v(10, 1);
vector<int> v = {1, 2, 3};


/*2차원 vector*/
vector< vector<int> > v;
vector< vector<int> > v(10, vector<int>(20, 1) );

함수 인자

/*call by value*/
void func(vector<int> v) {
	v.push_back(30);
}

int main() {
	vector<int> v;
    func(v);
}



/*call by reference*/
void func(vector<int> &v) {
	v.push_back(30);
}

int main() {
	vector<int> v;
    func(v);
}

각종 함수

vector<int> v;

v.push_back(10);
v.push_back(20);	// {10, 20}

v.insert(v.begin() + 1, 500);	// {10, 500, 20}

v.pop_back();		// {10, 500}

v.emplace_back(v.begin() + 1, -900);	// {10, -900, 500}

v.erase(v.begin() + 1);		// {10, 500}

find

  • 일치하는 원소가 없으면 last 반환
#include <algorithm>

/*vector*/
vector<int> v;

if (find(v.begin(), v.end(), 0) != v.end() ) {
	printf("0이 있다\n");
}



/*array*/
int arr[]=  {10, 20, 30, 40, 50};
if (find(arr, arr + 5, 30) != arr + 5) {
	printf("30이 있다\n");
}

resize

  • 전역변수로 먼저 선언하고, main 안에서 N 받으면 그 때 크기 지정해주는 게 가능하다
// DFS
vector< vector<int> > graph;
vector<bool> visited;


int main() {
	int N;
    scanf("%d", &N);
    
    graph.resize(N+1);
    visited = vector<bool>(N+1, false)	// 초기화하면서 크기 지정
}

sorting

  • graph 탐색 등에서 push back한 순서가 아닌, 크기가 작은 순서대로 탐색해야 하는 경우 유용하다
  • 우선순위 큐를 써야 하나 고민했다
vector< vector<int> > graph;

int main() {
	int N;
    cin >> N;
    graph.resize(N+1);

    //sorting
    for (int i = 1; i <= N; i++) {
        sort(graph[i].begin(), graph[i].end());
    }
}

0개의 댓글