programing

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

powerit 2023. 5. 28. 21:04
반응형

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

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

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

하지만 이렇게 하면,

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

OR

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_;
};

다음과 같이 사용합니다.

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

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

반응형