【发布时间】:2014-08-21 16:25:15
【问题描述】:
我需要交换两个不同大小的std::string 数组的内容。使用std::vector<std::string> 来使用swap 向量方法是其他类似问题的答案,但在我的情况下使用向量是不可取的,因为交换是数组长度可能改变的唯一时刻 - 这个函数只会在初始化时调用一次,除了它们是(非常大的)固定长度数组。最后,我重新构建了我的代码以避免交换,但我很好奇它是否可行。我尝试了以下方法,其中n 是a 的长度,m 是b 的长度,但它会出现段错误。
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;
}
我第一次尝试在a 和b 上不使用deletes。我还尝试使用std::string**,它甚至不应该工作 - 它没有。
那么……有可能吗?或者,如果我完成了交换,我是否应该只使用 std::vector,即使它们是固定大小的数组(除了交换)并且有几百万个元素长?
【问题讨论】:
-
你试过
std::string::swap吗? -
你不能真正交换数组,句号。
-
我认为没有理由仅仅因为大小是固定的而用原始指针来困扰自己。不改变向量的大小不会受到任何惩罚。如果界面给您带来麻烦,那么调整原始指针“数组”大小的能力也应该如此。
-
> 在我的情况下使用向量是不可取的,因为交换是数组可能改变其长度的唯一时刻 所以? Vector 使用数组作为底层容器,因此使用它会精确地增加零开销。如果您真的很担心,请改用 std::array。
-
“使用矢量是不可取的” - 无论如何,这就是答案。
标签: c++ arrays data-structures vector bigdata