使用支撑的init列表在向量中插入新元素

Inserting a new element in vector using a braced init-list

本文关键字:新元素 插入 元素 向量 列表 init      更新时间:2023-10-16

给定以下结构:

struct TestStruct
{
  int mA;
  int mB;
};

以及以下容器:

std::vector<TestStruct> _testContainer;

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

_testContainer.push_back({1,2});

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

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});
}

实时示例

没关系。

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

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

这是有效的C++还是我遗漏了什么?

是的,它是有效的c++语法。

根据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年应该会有所帮助。