将const int std :: array的n个元素复制到一个int向量中。怎么做?

时间:2018-03-26 02:58:23

标签: c++ arrays vector

我的代码中有array<const int, 4> reference,我想将此数组的前三个元素复制到vector<int> nvector。所以我尝试使用copy_n,如下所示,但是当我运行程序时,我遇到了分段错误。

copy_n(reference.begin(), 3, nvector.begin());

此阵列仅供咨询。我永远不会改变它的元素。但是在某种情况下,我想复制并返回它的前三个元素。但如果不满足这个条件,我将复制并返回它的4个元素。这就是为什么它需要是矢量。因为我的函数将返回3或4个数组元素的向量。

我该如何解决?

5 个答案:

答案 0 :(得分:4)

假设nvector为空,请使用std::back_inserter

std::copy_n(reference.begin(), 3, std::back_inserter(nvector));

答案 1 :(得分:3)

您必须确保nvector至少包含三个元素。

nvector.resize(3);
copy_n(reference.begin(), 3, nvector.begin());

您也可以使用std::back_inserter

copy_n(reference.begin(), 3, std::back_inserter(nvector));

答案 2 :(得分:3)

如果您希望向量仅包含3个元素:

nvector.assign(reference.begin(), reference.begin() + 3);

如果要将三个元素添加到现有的矢量内容中:

nvector.insert(nvector.begin(), reference.begin(), reference.begin() + 3);

如果要将三个元素附加到现有的矢量内容:

nvector.insert(nvector.end(), reference.begin(), reference.begin() + 3);

答案 3 :(得分:1)

copy_n之前,您的矢量似乎是空的。

如果这是真的,您可以使用std::back_inserter(),它返回back_inserter_iterator,您的代码就像

copy_n(reference.begin(), 3, std::back_inserter(nvector));  

与常见的push_back()操作不同,back_inserter_iterator不会失效,因此您可以节省插入元素。

答案 4 :(得分:-1)

我回答了我自己的问题,因为我找到了一个不同的解决方案。 事情就是在构造函数中为这个向量设置一个大小。

 vector<int> nvector( 3 );
 copy_n(reference.begin(), 3, nvector.begin());

不需要std :: back_inserter。