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),因为它不依赖于向量中的元素数量。
我最近读到 [ ]
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),因为它不依赖于向量中的元素数量。