使用支撑的init-list在向量中插入新元素

时间:2016-04-07 15:35:39

标签: c++ vector initialization

给出以下结构:

struct TestStruct
{
  int mA;
  int mB;
};

以及以下容器:

std::vector<TestStruct> _testContainer;

尝试使用支撑的init列表添加项时,编译器会抛出错误,如下所示:

_testContainer.push_back({1,2});

我正在使用2010年的visual studio的C ++编译器,这可能是罪魁祸首。这是有效的C ++还是我错过了什么?

3 个答案:

答案 0 :(得分:3)

MSVS 2010不符合C ++ 11标准。我建议升级到MSVS 2015并再次尝试。从这个例子可以看出

#include <iostream>
#include <vector>

struct foo
{
    int a;
    int b;
};

int main(void) {
    std::vector<foo> data;
    data.push_back({1,2});
}

Live Example

没关系。

答案 1 :(得分:0)

  

我正在使用2010年的visual studio的C ++编译器,这可能是罪魁祸首。

很可能,VS2010不支持当前的语言标准。

  

这是有效的C ++还是我错过了什么?

Yes it's valid c++ syntax.

答案 2 :(得分:0)

根据C ++ 11标准,这应该没问题:

struct foo {
    int a;
    int b;
};

int main() {
    std::vector<foo> data;
    data.push_back({1,2});

    return 0;
}

或者,你可以使用它:

int main() {
    std::vector<foo> data;
    data.emplace_back(1,2);

    return 0;
}

MSVC仍然遇到新标准的问题,升级到2013年甚至2015年都应该有所帮助。