【发布时间】:2011-06-29 09:14:44
【问题描述】:
我需要将std::set复制到std::vector:
std::set <double> input;
input.insert(5);
input.insert(6);
std::vector <double> output;
std::copy(input.begin(), input.end(), output.begin()); //Error: Vector iterator not dereferencable
问题出在哪里?
【问题讨论】:
-
还有
assign()函数:output.assign(input.begin(), input.end()); -
你的向量是空的。正如人们在下面指出的那样,有很多方法可以解决这个问题。
-
@Gene: assign() 想要提前保留() 必要的存储量。它将使用输入迭代器来确定需要多少,除非迭代器是严格的 InputIterator,在这种情况下,它将跳过保留并导致在每个 push_back() 上重新分配。在频谱的另一端,BiderectionalIterators 将允许它只减去 end - begin。然而,std::set 的迭代器都不是(它们是 ForwardIterator),这很不幸:在这种情况下,assign() 只会遍历整个集合以确定其大小——在大型集合上性能不佳。