我想要一些容器,我可以非常有效地附加可变数量的元素,但能够触发一些东西,这样我就可以从头开始覆盖。使用 astd::list
它看起来像这样:
while(whatever)
{
for(int i = 0; i < randNumber; ++i)
list.push_back( foo() );
//now want to reset
list.clear();
}
问题是list.clear()
线性时间,而我真的很想回到开始并从那里开始覆盖......我尝试使用矢量vector[index++] = foo()
并将清除替换为index = 0
但你无法预测randNumber
所以这不起作用......什么可以我用它来实现这个?
顺便说一句,即使我有一个微不足道的析构函数,向量 clear 似乎也不是恒定的时间:
struct rat
{
rat(int* a, int* b) : a_(a), b_(b) {}
int *a_;
int *b_;
};
int main(int argc, char **argv)
{
uint64_t start, end;
int k = 0;
vector<rat> v;
for (int i = 0; i < 9000; ++i)
v.push_back(rat(&k, &k));
start = timer();
v.clear();
end = timer();
cout << end - start << endl;
}