【问题标题】:How to create a vector of user defined size but with no predefined values? [closed]如何创建用户定义大小但没有预定义值的向量? [关闭]
【发布时间】:2012-05-11 22:13:30
【问题描述】:

在 C++ 中,可以使用int myarray[20] 创建一个预定义大小的数组,例如 20。但是,the online documentation on vectors 并没有显示出类似的初始化向量的方式:相反,应该使用例如std::vector<int> myvector (4, 100); 来初始化向量。这给出了一个大小为 4 的向量,所有元素的值都是 100。

如何像数组一样仅使用预定义的大小和没有预定义的值来初始化向量?

【问题讨论】:

  • @JesseGood - 我在编辑中链接到了两者,第一次用手指发胖了;)
  • @BrianRoach:您也可能想阅读What's wrong with cplusplus.com?
  • 对不起,我犯了一个错误。我总是使用它的默认构造函数创建向量,从来没有读过有一个构造函数接受两个参数,第一个作为元素的数量,第二个作为元素值。此构造函数创建一个由用户定义大小的向量,并将用户定义的值分配给所有位置。
  • 文档有时很难理解。 cplusplus.com/reference/vector/vector/vector 如果你解释 c++11 选项卡,你必须集中精力找到这个:explicit vector (size_type n);这基本上是说您可以设置大小而不是填充值,因此 std:vector arr(20) 将起作用。但我一开始也找不到这个,只看到了带有 2 个参数(大小,填充值)的构造函数

标签: c++ vector


【解决方案1】:

使用构造函数:

// create a vector with 20 integer elements
std::vector<int> arr(20);

for(int x = 0; x < 20; ++x)
   arr[x] = x;

【讨论】:

  • 对不起,对我不起作用,OS X Mavericks LLVM,默认为 xcode 4.2+。你用的是什么编译器?
  • 好吧,我明白了,我认为 LLVM 使用 c++ 的 clang,所以这很奇怪。我认为这些天矢量应该或多或少地被视为数组的替代品,并且应该反映在语法中(这应该是您当时编写的内容)。奇怪的是我的编译器不允许这样做。不过,此评论的重点是为已编写的内容添加扩展;所以,std::vector&lt;int&gt; arr = std::vector&lt;int&gt; (20); 对我来说很好,特别说明我想使用向量的构造函数。
  • 现在回想起来,我发现它可能因为“最令人头疼的解析”而失败了。尝试在 20 周围添加一些括号,如下所示:std::vector&lt;int&gt; arr((20));
  • @Chad 最好使用arr.at(x)=x 来检查 out_of_bounds 错误。如果发生错误,arr[x]=x 将静默失败。
  • 如果您需要范围检查,是的,at() 会进行检查并会因越界错误抛出异常,而 [] 不会检查。
猜你喜欢
  • 2015-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-26
  • 2021-01-05
  • 1970-01-01
  • 2023-03-06
  • 1970-01-01
相关资源
最近更新 更多