4

配列の内容をベクトルに書き込みたい。

int A[]={10,20,30,40,50,60,70,80,90};
vector<int> my_vector;

以前は、memcpyを使用して配列Aの内容を別の配列Bにコピーしていました。配列Bの代わりにmy_vectorを使用したい

forループなしで配列Aの内容をmy_vectorにワンショットで書き込む方法は?

4

3 に答える 3

6

使用したいC++2011を使用する

std::copy(std::begin(A), std::end(A), std::back_inserter(my_vector));

... また

std::vector<int> my_vector(std::begin(A), std::end(A));

...または、実際には:

std::vector<int> my_vector({ 10, 20, 30, 40, 50, 60, 70, 80, 90 });

C ++ 2011をお持ちでない場合は、次のように定義します。

namespace whatever {
    template <typename T, int Size>
    T* begin(T (&array)[Size]) { return array; }
    template <typename T, int Size>
    T* end(T (&array)[Size]) { return array + Size; }
}

whatever::begin()最初の2つのアプローチのいずれかとwhatever::end()一緒に使用します。

于 2012-09-03T05:52:44.463 に答える
4
#include <algorithm>
#include <vector>

int main() {
    int A[]={10,20,30,40,50,60,70,80,90};
    std::vector<int> my_vector;
    unsigned size = sizeof(A)/sizeof(int);
    std::copy(&A[0],&A[size],std::back_inserter(my_vector));
}

C++11ははるかに簡単です。

#include <vector>
#include <algorithm>

int main() {
    int A[]={10,20,30,40,50,60,70,80,90};
    std::vector<int> my_vector(std::begin(A),std::end(A));
}
于 2012-09-03T05:46:48.670 に答える
3

を使用するmemcpyか、C++98/03でそのような初期化を使用できます。

int A[]={10,20,30,40,50,60,70,80,90};
vector<int> my_vector(A, A + sizeof(A) / sizeof(*A));

また、などのアルゴリズムを使用することもできますcopy

std::copy(A, A + sizeof(A) / sizeof(*A), std::back_inserter(my_vector));

C ++ 11では、配列の開始と終了に、をstd::begin(A)使用します。std::end(A)

于 2012-09-03T05:43:44.280 に答える