对矢量分配的改进和明确

时间:2015-10-24 13:35:30

标签: c++ vector stl

很多时候我处理这类代码:

vector<int>prev,cur;

for(i=1;i<n;i++){       

    //do some operation on cur based on prev vector

    prev = cur;

    cur.clear();
}

是否有时间复杂度改进的范围?因为clear的时间复杂度就其元素而言是线性的(称为容器析构函数),是否有任何方法可以通过任何其他方法在O(1)或更短的时间内执行此操作?我应该使用指向矢量的指针然后更改指针以执行

  

prev = cur

2 个答案:

答案 0 :(得分:1)

1)你当前的做法需要一个元素的副本(即O(n))和cur的清除(原则上O(n)调用析构函数,但这不应该是性能问题基本类型,例如示例中的int

2)swap()在他的评论中推荐的 bhzad.nouri 交换了两个向量的元素。从性能的角度来看,你可以想象这有点像交换指针。无论如何真正实现,交换都是在恒定时间内完成的。在交换之后,您仍然拥有cur中的数据,因此您可能需要clear()它。

3)指向矢量的指针看起来很难看。矢量交换在性能方面取得了相同的结果,而且更加优雅!

答案 1 :(得分:0)

我的建议是在swap上使用移动语义:

for(i=1;i<n;i++){       

    //do some operation on cur based on prev vector

    prev = std::move(cur);

    cur.clear();
}