반응형
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
반응형
'programing' 카테고리의 다른 글
ScrollViewer가 스택 패널 내에서 작동하도록 하려면 어떻게 해야 합니까? (0) | 2023.05.28 |
---|---|
Bash 스크립트에서 출력을 무음화하는 방법은 무엇입니까? (0) | 2023.05.28 |
nodejs 및 express로 만든 REST API에서 응답 상태 및 JSON 내용을 올바르게 설정하는 방법 (0) | 2023.05.28 |
다른 스레드가 이 개체를 소유하고 있기 때문에 호출 스레드가 이 개체에 액세스할 수 없습니다. (0) | 2023.05.28 |
별도의 줄에서 %path% 에코 (0) | 2023.05.28 |