gpt4 book ai didi

c++ - 为什么 std::copy 抛出错误 vector 迭代器+偏移量超出范围并且无法复制

转载 作者:行者123 更新时间:2023-11-30 02:41:43 24 4
gpt4 key购买 nike

我试图将一个 int 数组复制到 std::vector of int 中,但我看到了一些异常行为。所以我有一个如下定义的数组。

int myarray[10] = {1,2,3,4,5,6,7,8,9,10};

我尝试使用下面的不同方法将上面的数组复制到 vector 中,但会引发错误。

1)使用储备

std::vector<int> vec1;
vec1.reserve(10);
std::copy(myarray, myarray+10,vec1.begin() );

这会在 VS 2013 中引发一个错误:-

vector iterator + offset out of range

2) 通过定义大小

std::vector<int> vec2(10);
std::copy(myarray, myarray+10,vec2.begin() );

成功地将数组复制到 vector 中。

3) 只需声明 vector 。

std::vector<int> vec3;
std::copy(myarray, myarray+10,vec3.begin() );

这也会抛出一个error

vector iterator + offset out of range

还在网上搜索我发现可以使用std::back_inserter,但我不知道它会有什么不同。

有人能解释一下这三种方法之间的区别以及 1 和 3 中出了什么问题吗?

最佳答案

代替 vec1.reserve(10); 使用 vec1.resize(10);

std::vector::reserve 会增加 vector 的容量,但大小保持不变。它要求 vector 容量至少足以包含 n 个元素。

另一方面,std::vector::resize 调整容器的大小,使其包含 n 个元素

关于c++ - 为什么 std::copy 抛出错误 vector 迭代器+偏移量超出范围并且无法复制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27833238/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com