1

我得到两个变量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_of如果您没有 C++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 回答