[英]std::copy failure, “cannot seek vector iterator after end”
我把这个测试用例放在一起,重现了我在更大的代码中得到的条件和问题。 我确实需要从POD结构的C数组中复制,但我希望目标是一个向量,因此它可以自己处理副本删除。
TEST_METHOD(std_copy)
{
struct W { long a; int b; char c; char d; };
W block[1] = { { 15, 42, 'D', 'X' } };
std::vector<W> dest;
dest.reserve(1);
std::copy(block, block+1, dest.begin());
Assert::AreEqual(42, dest[0].b);
}
断言“无法在结束后寻找向量迭代器”似乎发生在dest.begin()
调用中,这对我来说毫无意义。 我确定我只是错过了一个明显的细节,但它是什么?
正如错误消息所说,你已经超出了向量的范围。
给定std::copy(block, block+1, dest.begin());
, dest
应该包含至少相同数量的元素(即这里的一个元素),但实际上它是空的。
您可以使用resize
而不是reserve
,
std::vector<W> dest;
dest.resize(1);
std::copy(block, block+1, dest.begin());
要不就
std::vector<W> dest(1);
std::copy(block, block+1, dest.begin());
或者使用std::back_inserter
获取std::back_insert_iterator
。
只要分配了迭代器(无论是否取消引用),就会调用容器的
push_back()
成员函数。
std::vector<W> dest;
dest.reserve(1);
std::copy(block, block+1, std::back_inserter(dest));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.