반응형

STL 5

[C++] iterator로 set, vector 원소 삭제하기 (cannot increment value-intialized map/set)

개요 iterator로 set, vector 원소 삭제(earse)하는 방법에 대해 서술한다. for (set::iterator iter = s.begin(); iter != s.end(); iter++) { if (*iter % 2 == 0) { s.erase(iter); iter--; } } 삭제가 잘 될줄 알았지만... 삭제가 잘 되지 않는다. 사유를 보니 erase(iter)를 하게 되면 iter가 무효화되기 때문에 연산이 먹지 않는다고 한다. vector의 iterator여서 iter++을 하면 다음 요소로 넘어가지 않을까? 굳이 무효화해야하나?라고 생각했지만 iterator는 vector 말고도 list 등에서도 작동하므로 iter를 무효화해준다고 한다. https://stackoverflow..

언어/C++ 2022.11.19

[C++ STL] vector 선언 및 초기화 (1차원, 2차원)

개요 C++의 STL 중 하나로, 한 번에 한 타입만 저장 가능합니다. 이번 게시글에서는 vector의 선언과 초기화에 대해 다뤄보겠습니다. 상세 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 #include using namespace std; int n, m; // 기본적인 1차원 vector 선언 vector v; // 크기가 5인 1차원 vector 선언 vector v(5); // 크기가 5이고 초기값이 1인 1차원 vector 선언 vector v(5, 1); // 기본적인 2차원 vector 선언 vector v; // n x n 2차원 vector vector v(n, vector(n)); // 초기값이 1인 n x m 2차원 vector vector v(..

언어/C++ 2021.10.03

명백한 호출의 괄호 앞에 오는 식에는 함수 (포인터) 형식이 있어야 합니다 오류

명백한 호출의 괄호 앞에 오는 식에는 함수 (포인터) 형식이 있어야 합니다 vector를 사용하다가 떴던 오류. 구글링 해보니 내장 함수의 이름과 변수의 이름이 똑같아서라는데... v라는 내장 함수가 있을 리는 없고 알고 보니 v[0].first자체가 변수기 때문에 괄호를 붙여주지 말고 사용해야 했다. 괄호를 제거해주면 잘 출력된다. 내장함수와 이름이 겹치는 변수를 사용할 때 뜨는 오류와 동일하다. 위의 경우에는 algorithm.h 안에 max라는 내장 함수가 있어 max라는 변수를 사용할 수 없다 int max를 _max 등으로 바꾸어주면 된다.

언어/C++ 2021.09.18
반응형