개요. - std::vector
- 동적 배열이면서 배열의 마지막 지점에 엘리먼트 삽입 , 제거 에 최적화 되어있음.
- push_back() 마지막에 엘리먼트 삽입.
- pop_back() 마지막 엘리먼트 삭제.
- 마지막 아닌곳도 엘리먼트 삽입, 삭제 가능하긴 함.
- vector 는 메모리에 연속 배치됨.
- push_back() 마지막에 엘리먼트 삽입.
- pop_back() 마지막 엘리먼트 삭제.
- 마지막 아닌곳도 엘리먼트 삽입, 삭제 가능하긴 함.
- vector 는 메모리에 연속 배치됨.
비교
- std::deque 마지막 과 앞 모두 엘리먼트 삽입제거 가능. 메모리에 불연속 배치됨.
- std::deque 마지막 과 앞 모두 엘리먼트 삽입제거 가능. 메모리에 불연속 배치됨.
헤더파일 : vector , #include <vector>
기본 문법.
std::vector 생성자 사용예
#include <vector>
std::vector<int> first; // empty vector of ints
std::vector<int> second (4,100); // four ints with value 100
std::vector<int> third (second.begin(),second.end()); // iterating through second
std::vector<int> fourth (third); // a copy of third
// the iterator constructor can also be used to construct from arrays:
int myints[] = {16,2,77,29};
std::vector<int> fifth (myints, myints + sizeof(myints) / sizeof(int) );
루프
std::vector<i> my_vec;
my_vec.push_back(345); // 345 를 my_vec 마지막에 추가
my_vec.push_back(3); // 3을 my_vec 마지막에 추가
// 일반 배열처럼 루프
for(int i = 0 ; i<my_vec.size() ; i++)
{
my_vec.at(i);// my_vec[i] 로 해도 됨.
}
// iterator 를 이용한 루프 .
vector<int>::iterator iter;
for(iter = my_vec.begin(); iter != my_vec.end(); iter++)
{
*iter; //iterator 는 엘리먼트 주소를 받는 포인터이므로 값을 받기 위해서 * 부착.
}
// auto 이용한 루프
for(auto iter : my_vec)// 엘리먼트의 값을 복사해서 iter 에 넣어줌.
{
iter; // 값이 복사된 것이므로 iter 그냥 사용.
}
////////// 엘리먼트 받기
my_vec.at(idx); // idx에 해당하는 것
my_vec[idx]; // idx 에 해당하는 것
my_vec.front(); // 첫번째 것
my_vec.back(); // 마지막 것
///// 특정 엘리먼트에 값 대입.
my_vec.at(idx) = 값;
my_vec[idx] - 값;
///// 엘리먼트 삽입.
my_vec.push_back(element); // 마지막에 삽입.
my_vec.insert(iter, element); // iter 에 element 삽입. 뒤의것은 밀림.
my_vec.insert(iter,5 ,element); // iter 에 5개의 element 삽입. 뒤의것은 밀림.
///// 제거
my_vec.pop_back() ; // 마지막것 제거.
my_vec.clear() ; // 모두 제거.
my_vec.erase(iteration); // iteration 에 해당하는것 제거.
/// 제거 . erase
my_vec.erase(my_vec.begin()); // 첫번째 요소 제거 .
my_vec.erase(my_vec.begin()+1); // 2번째 요소 제거 .
my_vec.erase(my_vec.end() - 1); // 마지막것 제거 . -1 해야함.
my_vec.erase(my_vec.end() - 2); // 마지막 앞에것 제거 . -2 해야함.
my_vec.erase(iter_start,iter_end); // iter_start 이상 iter_end "미만" 제거.
- erase(iterator) : 인자 iterator 로 지정된 1개 엘리먼트 삭제. (일반 배열같은 인덱스로 지정안됨)
- erase(it1, it2) it1과 it2 사이의 모든 엘리먼트 삭제.
- 반환값 : 삭제된 다음 엘리먼트의 iterator
vector 엘리먼트 메모리 배치는 일반배열과 동일하게 연속 배치됨.
std::vector<double> vec_dbl;
double * p_double = &vec_dbl[0]; // double 포인터로 받음. 아래 data() 로 받는것과 동일.
double * p_double = vec_dbl.data();// vector 에서 제공되는 함수 이용하여 첫엘리먼트주소받는것.
vector 에서의 비교연산자.
if(vec1 == vec2) // 벡터의 모든 요소가 같으면 true.
if(vec1 != vec2) // 다르다의 정의 : 요소중 1개 이상이 다르면 다른것.
vector assign (다른 vector 복사 )
// vec2 의 요소 3~254까지 vec1 에 복사.
vec1.assign (vec2.begin() + 3 , vec2.begin() + 254);
// vec2 전체요소 를 vec1 에 복사.
vec1.assign (vec2.begin(), vec2.end());
vector 최대값, 최소값 , 인덱스 구하기
#include <vector>
#include <algorithm>
std::vector<double> my_vec_double;
double max = *max_element(my_vec_double.begin(), my_vec_double.end()); // 최대값
int idx_max = max_element(my_vec_double.begin(), my_vec_double.end()); // 최대값인 엘리먼트 인덱스
double min = *min_element(my_vec_double.begin(), my_vec_double.end()); // 최소값
int idx_min = min_element(my_vec_double.begin(), my_vec_double.end()); //최소값인 엘리먼트 인덱스
연관
C++. std::map . 키-값 컬렉션
#include /// 선언 std::map my_map_i_str; /// 요소추가 예. 키=3, 값 igotit my_map_i_str[3] = std::string("igotit"); /// 요소추가 my_map_i_str.insert(std::pair (3,std::string("igotit"))); /// 요소제거..
igotit.tistory.com
std::deque .
std::deque std::vector 의 특성에 아래 특성이 추가된것. - push_front() ; 첫자리에 원소 추가. - pop_front() ; 첫자리의 원소 제거. 생성 방법 및 기타 함수사용법은 vector 와 동일. 연관. std::vector. ST..
igotit.tistory.com
첫 등록 : 2016년 1월 20일.
최종 수정 : 2022.02.05
단축 주소 : https://igotit.tistory.com/570
'VisualStudio.C++.C# > 코딩팁,함수활용,단편' 카테고리의 다른 글
std::deque . (0) | 2020.10.21 |
---|---|
std::queue. (0) | 2020.10.17 |
MFC. Extension DLL. 확장 DLL . 인스턴스핸들 . 리소스 아이디 충돌 해결 (0) | 2020.10.04 |
MFC. CFileDialog . 파일열기, 쓰기 공통대화상자 (0) | 2020.10.02 |
MFC. 스크롤바 제거 (0) | 2020.10.02 |
댓글