【发布时间】:2010-10-02 06:57:15
【问题描述】:
使用迭代器遍历向量并复制到列表是最佳的复制方法。有什么建议吗?
【问题讨论】:
使用迭代器遍历向量并复制到列表是最佳的复制方法。有什么建议吗?
【问题讨论】:
为什么要迭代而不使用标准复制算法?
std::copy( vector.begin(), vector.end(), std::back_inserter( list ) );
【讨论】:
如果您要创建一个新列表,您可以利用一个带有开始和结束迭代器的构造函数:
std::list<SomeType> myList(v.begin(), v.end());
如果您有一个想要附加到的现有列表,Kasprzol 的答案是完美的。
【讨论】:
list.assign(vector.begin(), vector.end());
【讨论】:
我喜欢这个关于构建新列表的建议。
std::list<SomeType> myList(v.begin(), v.end());
但是当附加到现有列表时,以下可能是小型数据集的最佳选择。所谓“最优”,我的意思是最容易记住如何做和最容易理解。 (这些都是主观陈述,我相信这取决于你的大脑是如何连接的。)
for ( unsigned i=0; i<v.size(); i++ ) myList.push_back(v[i]);
在许多情况下,对向量使用迭代器可能过于迂腐。简单的索引通常可以正常工作。
另一个线程处理迭代器与索引 (here)。在那个线程中,所采用的答案基本上首选迭代器,因为它们更通用。但如果向量是最常用的容器类型,我认为专门化这种简单的算法是合理的。
【讨论】:
您可以尝试使用<algorithm> 标头中更复杂的内容,例如for_each 或copy ...但在我看来,它们的作用相同。
【讨论】: