在2D矢量和2D数组中交换两行的复杂性是什么,我测试了两者的时间复杂度似乎在矢量交换中几乎O(1)
但在数组中工作速度较慢,那么&确实很复杂,为什么不同?
(非常慢):
int arr[N][N];
// input the array elements
while (q--) { // number of queires
int x, y;
scanf("%d %d", &x, &y);
swap(arr[x], arr[y]);
}
在向量中使用相同的代码但不使用int arr[N][N]
我使用vector<<vector>>
答案 0 :(得分:1)
std::swap
使用move semantics优化std::vector
的交换。从本质上讲,它归结为交换两个std::vector
之间的一些内部指针。并不重要的是向量中有多少个值。它或多或少是一个指针交换。恒定时间。
本机阵列没有这样的快捷方式。必须顺从地复制数组中的所有值。
移动语义是C ++ 11的主要补充之一。
为了澄清,简单来说,std::vector
是一个如下所示的类:
template<typename T>
class vector {
T *data;
size_t data_size;
};
除此之外还有更多内容,但这可以解决问题:std::swap
需要做的就是移动指针(和data_size
以及其他一些指针比特),在两个向量之间,你去:向量的内容已被交换。不需要实际的数据复制。