交换不同大小的数组

Swap arrays of different sizes

本文关键字:数组 交换      更新时间:2023-10-16

我需要交换两个不同大小的std::string数组的内容。使用std::vector<std::string>来使用swap向量方法是其他类似问题的答案,但是在我的情况下使用向量是不可取的,因为交换是数组可能改变其长度的唯一时刻-这个函数只会被调用一次,在初始化时,除了它们将是(非常大的)固定长度的数组。最后,我重新构造了我的代码,以避免交换,但我很好奇这是否可行。我尝试了以下内容,其中na的长度,mb的长度,但它出现了分段错误。

void swap_strarr(std::string *a, std::string *b, int n, int m) {
    int i;
    std::string *tmp;
    tmp = new std::string[n];
    for (i = 0; i < n; i++) {
        tmp[i] = a[i];
    }
    delete []a;
    a = new std::string[m];
    for (i = 0; i < m; i++) {
        a[i] = b[i];
    }
    delete []b;
    b = new std::string[n];
    for (i = 0; i < n; i++) {
        b[i] = tmp[i];
    }
    delete []tmp;
}

我首先尝试在ab上没有delete s。我也试过使用std::string**,它甚至不应该工作-它没有。

所以…这可能吗?或者,如果我做了交换,我应该只使用std::vector,即使它们是固定大小的数组(除了交换)和几百万个元素长?

为什么不干脆这样写:

std::string* tmp = a;
a = b;
b = tmp;

或者更简单(谢谢juanchopanza):

std::swap(a, b);