IT story

C ++에서 벡터를 초기화하는 방법

hot-time 2020. 5. 13. 08:03
반응형

C ++에서 벡터를 초기화하는 방법


가능한 중복 :
C ++ : 하드 코딩 된 요소로 STL 벡터를 초기화하는 가장 쉬운 방법

배열의 경우처럼 벡터를 초기화하고 싶습니다.

int vv[2] = {12, 43};

하지만 이렇게하면

vector<int> v(2) = {34, 23};

또는

vector<int> v(2);
v = {0, 9};

오류가 발생합니다.

'{'토큰 이전의 기본 표현

오류 : ','또는 ';'예상 '='토큰 이전

각기.


새로운 C ++ 표준을 사용하면 (컴파일러에서 특수 플래그를 활성화해야 할 수도 있음) 간단하게 수행 할 수 있습니다.

std::vector<int> v { 34,23 };
// or
// std::vector<int> v = { 34,23 };

또는:

std::vector<int> v(2);
v = { 34,23 };

이 기능 (이니셜 라이저 목록)을 지원하지 않는 컴파일러에서는이를 배열로 에뮬레이션 할 수 있습니다.

int vv[2] = { 12,43 };
std::vector<int> v(&vv[0], &vv[0]+2);

또는 기존 벡터에 할당하는 경우 :

int vv[2] = { 12,43 };
v.assign(&vv[0], &vv[0]+2);

James Kanze가 제안한 것처럼 배열의 시작과 끝을 제공하는 함수를 갖는 것이 더 강력합니다.

template <typename T, size_t N>
T* begin(T(&arr)[N]) { return &arr[0]; }
template <typename T, size_t N>
T* end(T(&arr)[N]) { return &arr[0]+N; }

그런 다음 크기를 완전히 반복하지 않고도이 작업을 수행 할 수 있습니다.

int vv[] = { 12,43 };
std::vector<int> v(begin(vv), end(vv));

다음과 같이 할 수도 있습니다 :

template <typename T>
class make_vector {
public:
  typedef make_vector<T> my_type;
  my_type& operator<< (const T& val) {
    data_.push_back(val);
    return *this;
  }
  operator std::vector<T>() const {
    return data_;
  }
private:
  std::vector<T> data_;
};

And use it like this:

std::vector<int> v = make_vector<int>() << 1 << 2 << 3;

참고URL : https://stackoverflow.com/questions/8906545/how-to-initialize-a-vector-in-c

반응형