본문 바로가기
VisualStudio.C++.C#/코딩팁,함수활용,단편

std::vector. STL vector class. 사용법.

by i.got.it 2020. 10. 14.

 

 

개요. - std::vector

 

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

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

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

 비교
 - 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

 


 

댓글



 

비트코인




암호화폐       외환/나스닥/골드         암호화폐/외환/나스닥/골드
     
현물 |선물 인버스 |선물 USDT       전략매니저(카피트레이딩)         프랍 트레이더 온라인 지원가능. MT4,MT5