c++11 函数调用中的 vector 初始化

标签 c++ vector c++11

我有一个关于在 c++11 中定义 vector 的新快捷方式的问题。假设我有以下类(class)

struct Tester{

  vector< vector<int> > data;

  Tester(){
    data = vector< vector<int> >();
  }

  void add(vector<int> datum){
    data.push_back(datum);
  }

};

然后,以下工作按预期工作:

int main(){
    Tester test = Tester();
    vector<int> datum = vector<int>{1,2,3};
    test.add(datum);
}

但这不是:

int main(){
    Tester test = Tester();
    test.add(vector<int>{1,2,3});
}

有人可以向我解释一下区别吗?如何执行我在第二个 main() 中尝试的快捷方式?

最佳答案

您的代码似乎没问题,但您使用的编译器却不是(这似乎是旧的)。

顺便说一句,你做的太多了。

这就够了:

vector<int> datum{1,2,3}; //initialization

test.add({1,2,3}); //create vector<int> on the fly and pass it to add()

别忘了更新你的编译器。

另外,data = vector< vector<int> >(); 行也太多了。它不是必需的。 vector 是自动构造的,这意味着您可以将类的构造函数留空,或者根本不拥有它,因为它不会做任何事情。

关于c++11 函数调用中的 vector 初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13975804/

相关文章:

c++ - 为什么宏 __STL_FUNCTION_TMPL_PARTIAL_ORDER 应该将模板函数包含在 std_pair.h 中

c++ - 了解迭代器对 std::vector 的行为

c++ - 删除 vector 中的所有元素,直到第一个非零元素 C++

c++ - 继承和友元函数,从基类访问 protected 成员

c++ - 从具有多重继承的派生类调用所有基类的公共(public)命名方法

c++ - 确定通过 malloc() 进行的分配是否由大页面支持

c++ - 如何验证是否选中了多个复选框

c++ - 为什么我们需要 unique_ptr vector 的移动构造函数?

C++ 在测试成员变量是否等于 NULL 时卡住

vector - 如何从栅格中提取多边形?