2

私はベクトルを使用していて、次のように初期化しています。

vector<int> values;

values.push_back(1);
values.push_back(2);
values.push_back(8);
values.push_back(12);
values.push_back(32);
values.push_back(43);
values.push_back(23);
values.push_back(234);
values.push_back(7);
values.push_back(1);

配列のような方法でこれらの要素をpush_backする方法はありますか?このような:

    int numbers[2] = {1, 2};

ベクトル法は、あまりにも多くの行を使用します、IMO!

4

3 に答える 3

9

C ++ 11では、任意のコンテナーで中括弧の初期化を使用できます。

std::vector <int> v = {1, 2, 8, 12, 32 ...};

C ++ 03では、これを行うことができます

const int arr[] = {1, 2, 8, 12, 32 ... };
const int size = sizeof arr / sizeof arr[0];
std::vector<int> v(arr, arr + size);

または、ブースト割り当てを使用します。

#include <boost/assign.hpp>
using namespace boost::assign;
///...
{
    std::vector<int> v;
    v += 1, 2, 8, 12, 32;
}
于 2012-11-07T20:14:05.420 に答える
4

C ++ 11コンパイラを使用している場合は、これを行う方法が実際にあります。

std::vector<int> values = {1, 2, 3, 4, 5};

これは、初期化リストとして知られています。要素を初期化するために初期化子リスト(宣言7を参照)を受け取るコンストラクターstd::vectorがあります。

于 2012-11-07T20:13:18.630 に答える
3

C ++ 11では、配列の場合と同じ方法で実行できます。std::vectorをとるコンストラクターがstd::initializer_list<T>あります。これにより、リストから自分自身を初期化できます。

C ++ 03では、一時配列を使用できます。

int tempValues[] = {1,2,8,12,32,43,23,234,7,1};
std::vector<int> values(tempValues, tempValues + sizeof tempValues / sizeof tempValues[0]);
于 2012-11-07T20:13:46.310 に答える