我的代码中有array<const int, 4> reference
,我想将此数组的前三个元素复制到vector<int> nvector
。所以我尝试使用copy_n
,如下所示,但是当我运行程序时,我遇到了分段错误。
copy_n(reference.begin(), 3, nvector.begin());
此阵列仅供咨询。我永远不会改变它的元素。但是在某种情况下,我想复制并返回它的前三个元素。但如果不满足这个条件,我将复制并返回它的4个元素。这就是为什么它需要是矢量。因为我的函数将返回3或4个数组元素的向量。
我该如何解决?
答案 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。