使用交换函数在向量和数组中交换两行的复杂性

时间:2016-12-03 14:31:25

标签: c++ vector stl time-complexity swap

在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>>

1 个答案:

答案 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以及其他一些指针比特),在两个向量之间,你去:向量的内容已被交换。不需要实际的数据复制。