【问题标题】:initializing vectors with variables, C++用变量初始化向量,C++
【发布时间】:2014-10-09 05:03:45
【问题描述】:

我希望能够使用如下变量初始化向量:

    int min,max;
    scanf("%d %d", &min, &max); 
    vector<int> day(min, max, max);

但是当我尝试时,我收到一条错误消息:

IntelliSense:没有构造函数实例“std::vector<_ty _alloc>::vector [with _Ty=int, _Alloc=std::allocator]”与参数列表匹配 参数类型是:(int, int, int)

有没有办法解决这个问题?如果这很重要,我正在使用 Visual Studio 2013。谢谢!

【问题讨论】:

  • 如果你可以使用 C++11,你可以像vector&lt;int&gt; day {min, max, max};那样使用列表初始化

标签: c++ vector initialization


【解决方案1】:

假设你的编译器支持它,你需要列表初始化来指定向量的内容:

vector<int> day{min, max, max};

在 C++11 之前,比较乏味:

vector<int> day;
day.push_back(min);
day.push_back(max);
day.push_back(max);

【讨论】:

  • 现在我想起来了,我很惊讶他们没有为此使用operator&lt;&lt;...
  • 在 C++11 之前可以使用 boost::assign: vector&lt;int&gt; day = boost::assign::list_of(min)(max)(max);
【解决方案2】:

你也可以这样做:

int min,max;
scanf("%d %d", &min, &max);
int temp[] = {min, max, max};
vector<int> day(temp, temp + sizeof(temp) / sizeof(int));

这将花费您一点额外的内存。 C++98C++11 都支持这个。

【讨论】:

  • 我更喜欢vector&lt;int&gt; day(begin(temp), end(temp));——它比内联指针算术更简洁。
猜你喜欢
  • 1970-01-01
  • 2020-08-15
  • 2018-09-30
  • 2012-06-21
  • 2013-05-10
  • 1970-01-01
  • 2016-03-11
  • 2015-04-22
  • 1970-01-01
相关资源
最近更新 更多