我在我的代码中有 array<const int, 4> reference
,我想将此数组的前三个元素复制到 vector<int> nvector
。因此,我尝试使用以下copy_n
,但是运行程序时会遇到细分错误。
copy_n(reference.begin(), 3, nvector.begin());
此数组仅用于咨询。我永远不会改变它的元素。但是在某种情况下,我想复制并返回其前三个元素。但是,如果不满足此条件,我将复制并返回其4个元素。这就是为什么它需要为矢量。因为我的功能将返回数组的3或4个矢量。
我该如何解决?
假设nvector
是空的,请使用std::back_inserter
:
std::copy_n(reference.begin(), 3, std::back_inserter(nvector));
如果您希望向量仅包含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);
您必须确保nvector
至少具有三个元素。
nvector.resize(3);
copy_n(reference.begin(), 3, nvector.begin());
您也可以使用std::back_inserter
。
copy_n(reference.begin(), 3, std::back_inserter(nvector));
似乎您的向量在copy_n
之前为空。
如果是真的,您可以使用返回back_inserter_iterator
的std::back_inserter()
,您的代码就像
copy_n(reference.begin(), 3, std::back_inserter(nvector));
与常见的push_back()
操作不同,back_inserter_iterator
不会无效,因此可以插入元素。
我正在回答自己的问题,因为我找到了你们的另一种解决方案。事情只是为构造函数中的该向量设置了大小。
vector<int> nvector( 3 );
copy_n(reference.begin(), 3, nvector.begin());
无需std :: back_inserter。