[英]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.