C++“[]”运算符

C++ "[ ]" operator

我最近读到 question, and on searching a bit I found 对于向量(任何更多容器)[ ] c++ 中的运算符 实际上 returns 引用,因此 O(1) 复杂度,只是 above 它,有人提到 = 运算符具有线性时间复杂度,所以我的问题是如果我有一个多维向量 v 和我做了类似的事情:

v[i]=v[j];

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

This 是讨论算法的博客,在此评论的第二行用户说它是 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),因为它不依赖于向量中的元素数量。