繁体   English   中英

交换不同大小的数组

[英]Swap arrays of different sizes

我需要交换两个不同大小的std::string数组的内容。 使用std::vector<std::string>来使用swap向量方法是诸如此类的其他问题的答案,但是在我的情况下,不希望使用向量,因为交换是数组可能仅有其阵列的唯一时刻。长度已更改-该函数在初始化时只会被调用一次,除了它们将是(很大)固定长度的数组。 最后,我重新构造了代码,以免一开始就进行交换,但是我很好奇它是否可行。 我尝试以下,其中n是长度am的长度b ,但它出现segfaults。

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;
}

我首先尝试不delete ab上的delete 我还尝试使用std::string** ,它甚至不起作用-而且没有。

所以...有可能吗? 或者,是否完成了交换,即使它们是固定大小的数组(交换除外),并且长度为几百万个元素,我也应该只使用std::vector吗?

为什么不简单地这样:

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

甚至更简单(感谢juanchopanza):

std::swap(a, b);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM