std::copy 失败,"cannot seek vector iterator after end"
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);
}
断言 "cannot seek vector iterator after end" 似乎发生在 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
to get an std::back_insert_iterator
.
The container's push_back()
member function is called whenever the iterator (whether dereferenced or not) is assigned to.
std::vector<W> dest;
dest.reserve(1);
std::copy(block, block+1, std::back_inserter(dest));
我整理了这个测试用例,它重现了我在更大的代码中遇到的情况和问题。事实上,我确实需要从 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);
}
断言 "cannot seek vector iterator after end" 似乎发生在 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
to get an std::back_insert_iterator
.
The container's
push_back()
member function is called whenever the iterator (whether dereferenced or not) is assigned to.
std::vector<W> dest;
dest.reserve(1);
std::copy(block, block+1, std::back_inserter(dest));