繁体   English   中英

C++ "[ ]" 运算符

[英]C++ "[ ]" operator

我最近阅读了这个问题,经过一番搜索,我发现对于 c++ 中的向量(任何更多容器) [ ]运算符实际上返回引用,因此 O(1) 复杂度,就在它上面,提到=运算符具有线性时间复杂度,所以我的问题是如果我有一个多维向量 v 并且我会做类似的事情:

v[i]=v[j];

它是恒定时间操作还是线性时间,为什么? 我在某处读到它是 O(1) 但我不确定。

是讨论算法的博客,在这条评论的第二行用户说它是 O(1)(这里 v 是一个多维向量/向量数组),它是这个算法的关键,如果它是不,我认为该算法不会具有相同的复杂性,

谢谢!

复制整个std::vector<T>的时间复杂度为 O(N),因为每个元素T都需要复制。

C++ 标准要求std::vector<T>::operator[]的所有重载具有常量复杂性。 通常它是在std::vector中的数据上使用指针算法实现的。

所以, v[i] = v[j]; 是 O(1)。

T可以是任意多维的事实在这里无关紧要。 矢量副本是 O(N),因为如果将元素数量加倍,则时间也会加倍(无论如何都在一定限度内)。 向量元素副本的复杂度为 O(1),因为它不依赖于向量中元素的数量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM