1

2つの変数を取得ab、それらを配列のリストに直接追加したいと思います。後でリストにプッシュされる別の配列を定義しないようにするにはどうすればよいですか?

で始まる行に似た構造を探してい//ます。

最小限の例:

#include <list>
#include <boost/array.hpp>

using namespace std;

int main()
{
    cout << endl;

    /* given values */
    int a = 1;
    int b = 2;

    /* arrayList contains arrays of integers. */
    list<boost::array<int, 2> > arrayList;

    /* item to add values */
    boost::array<int, 2> item;

    item[0] = a;
    item[1] = b;
    arrayList.push_back(item);

//  arrayList.push_back({{a, b}});

    cout << arrayList.front()[0] << ", " << arrayList.front()[1] << endl;

    return 0;

}

私のg++バージョンは次のとおりです gcc-Version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5)

(Eclipse内で)コンパイルすると、エラーとしてリストされたこの警告がスローされます。 つまり、次のWarnung: erweiterte Initialisierungsliste nur mit -std=c++0x oder -std=gnu++0x verfügbar [standardmäßig aktiviert] main.cpp /testArrayListAndFind line 24 C/C++ Problem ことを意味します。Extended initilization list only with ... or ... available.

4

3 に答える 3

2

にプッシュされる配列をlist作成する必要があります。問題は、自分の側で許容できる作業/タイピングをどのように考えるかです。

たとえば、ヘルパー関数を作成できます。

boost::array<int, 2> make_array(int a, int b)
{
  boost::array<int, 2> item;
  item[0] = a;
  item[1] = b;
  return item;
}

その後、あなたはすることができます

arrayList.push_back(make_array(a, b));

これは、配列に必要な要素が2つだけであることを前提としています。この場合は、のstd::pair<int, int>代わりに使用することもできますboost::array<>。そうでなければ、あなたはいくつかの過負荷を作成する可能性がありますmake_array()

于 2012-06-05T22:34:50.203 に答える
2

boost::assign::list_ofC ++ 11をサポートしていない場合は、次を使用できます。

arrayList.push_back(boost::assign::list_of(1)(2));
于 2012-06-05T22:55:29.153 に答える
0

リストのサイズを希望のサイズに変更し、リスト内で配列を直接変更できます。たとえば、

arrayList.resize(10);

for(list::iterator iter = arrayList.begin(); iter != arrayList.end(); ++iter) {
  (*iter)[0] = <value_a>;
  (*iter)[1] = <value_b>;
}

この例では、resize()が実際にboost :: arrayのコンストラクターを呼び出すため、パフォーマンスの節約は最小限に抑えられることに注意してください。

于 2012-06-05T22:50:54.477 に答える