개요. - std::vector

 

- 동적 배열이면서 배열의 마지막 지점에 엘리먼트 삽입  , 제거 에 최적화 되어있음. 

- push_back()  마지막에 엘리먼트 삽입.
- pop_back() 마지막 엘리먼트 삭제. 

- 마지막 아닌곳도 엘리먼트 삽입, 삭제 가능하긴 함. 
- vector 는 메모리에 연속 배치됨. 

 비교
 - std::deque  마지막 과 앞 모두 엘리먼트 삽입제거 가능. 메모리에 불연속 배치됨. 



기본 문법.
 

 

 

 

 

 

 

 

std::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.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 해야함. 


- 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개 이상이 다르면 다른것.

 

 

 

연관 

 

 

std::deque .

std::deque std::vector 의 특성에 아래 특성이 추가된것. - push_front() ; 첫자리에 원소 추가.  - pop_front() ; 첫자리의 원소 제거. 생성 방법 및 기타 함수사용법은 vector 와 동일. 연관. std::vector. ST..

igotit.tistory.com

 

 

 


첫 등록 : 2016년 1월 20일. 

최종 수정 : 2020년 10월 14일

단축 주소 : https://igotit.tistory.com/570

 


 

Posted by 리치굿맨
TAG , ,

댓글을 달아 주세요