C ++:如何将数组元素推送到数组列表中?

时间:2012-06-05 22:28:41

标签: c++ list

我得到两个变量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.

3 个答案:

答案 0 :(得分: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()

的重载

答案 1 :(得分:2)

如果您没有C ++ 11支持,可以使用boost::assign::list_of

arrayList.push_back(boost::assign::list_of(1)(2));

答案 2 :(得分: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 的构造函数,因此性能节省最小。