【发布时间】:2012-08-09 22:52:22
【问题描述】:
我有一个向量,我想使用 STL 算法有效地将向量的后半部分分解为另一个向量。这是我看到的一种方法,但希望有更有效和简洁的答案,或者至少是使用 stl 算法的答案:
std::vector<Entry> &entries = someFunction();
int numEntries = entries.size();
// Assume numEntries is greater than or equal to 2.
std::vector<Entry> secondEntries;
std::vector<Entry>::iterator halfway = entries.begin() + numEntries / 2;
std::vector<Entry>::iterator endItr = entries.end()
// Copy the second half of the first vector in the second vector:
secondEntries.insert(secondEntries.end(), halfway, endItr);
// Remove the copied entries from the first vector:
entries.erase(halfway, endItr);
【问题讨论】:
-
唯一的优化是为
secondEntries保留足够的大小,这样就不需要重新分配。除此之外,还有什么比简单地复制元素更有效? -
@mfontanini
vector的插入不是已经为随机访问迭代器做到这一点了吗? -
顺便说一句,您可以使用插入数据创建向量
std::vector<Entry> secondEntries(halfway, endItr); -
@MarkB 你是对的。好吧,那基本上没有优化xD
标签: c++ insert stdvector erase