将const int std ::数组的n元素复制到int矢量中.怎么做



我在我的代码中有 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_iteratorstd::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。

最新更新