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