- push_back() 마지막에 엘리먼트 삽입. - pop_back() 마지막 엘리먼트 삭제.
- 마지막 아닌곳도 엘리먼트 삽입, 삭제 가능하긴 함. - vector 는 메모리에 연속 배치됨.
비교 - std::deque 마지막 과 앞 모두 엘리먼트 삽입제거 가능. 메모리에 불연속 배치됨.
헤더파일 : vector , #include <vector>
기본 문법.
std::vector
The STL vector class is a template class of sequence containers that arrange elements of a given type in a linear arrangement and allow fast random access to any element. They should be the preferred container for a sequence when random-access performance is at a premium.
TypeThe element data type to be stored in the vectorAllocatorThe type that represents the stored allocator object that encapsulates details about the vector's allocation and deallocation of memory. This argument is optional and the default value isallocator<Type>.
Vectors allow constant time insertions and deletions at the end of the sequence. Inserting or deleting elements in the middle of a vector requires linear time. The performance of thedeque Classcontainer is superior with respect to insertions and deletions at the beginning and end of a sequence. Thelist Classcontainer is superior with respect to insertions and deletions at any location within a sequence. Vector reallocation occurs when a member function must increase the sequence contained in the vector object beyond its current storage capacity. Other insertions and erasures may alter various storage addresses within the sequence. In all such cases, iterators or references that point at altered portions of the sequence become invalid. If no reallocation happens, only iterators and references before the insertion/deletion point remain valid. Thevector<bool> Classis a full specialization of the template class vector for elements of type bool with an allocator for the underlying type used by the specialization. Thevector<bool> reference Classis a nested class whose objects are able to provide references to elements (single bits) within a vector<bool> object.
Replaces the elements of the vector with a copy of another vector.
Requirements
Header:<vector> Namespace:std
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()); //최소값인 엘리먼트 인덱스
댓글