gpt4 book ai didi

c++ - 改进 vector 赋值和清除

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:16:11 24 4
gpt4 key购买 nike

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

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) 或更短时间内执行此操作?我应该使用指向 vector 的指针然后更改指针来做

prev = cur

最佳答案

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

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

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

关于c++ - 改进 vector 赋值和清除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33318821/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com