【问题标题】:Swap arrays of different sizes交换不同大小的数组
【发布时间】:2014-08-21 16:25:15
【问题描述】:

我需要交换两个不同大小的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 上不使用deletes。我还尝试使用std::string**,它甚至不应该工作 - 它没有。

那么……有可能吗?或者,如果我完成了交换,我是否应该只使用 std::vector,即使它们是固定大小的数组(除了交换)并且有几百万个元素长?

【问题讨论】:

  • 你试过std::string::swap吗?
  • 你不能真正交换数组,句号。
  • 我认为没有理由仅仅因为大小是固定的而用原始指针来困扰自己。不改变向量的大小不会受到任何惩罚。如果界面给您带来麻烦,那么调整原始指针“数组”大小的能力也应该如此。
  • > 在我的情况下使用向量是不可取的,因为交换是数组可能改变其长度的唯一时刻 所以? Vector 使用数组作为底层容器,因此使用它会精确地增加零开销。如果您真的很担心,请改用 std::array。
  • “使用矢量是不可取的” - 无论如何,这就是答案。

标签: c++ arrays data-structures vector bigdata


【解决方案1】:

为什么不简单点:

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

甚至更简单(感谢 juanchopanza):

std::swap(a, b);

【讨论】:

  • 为什么不呢?因为那只会交换本地指针,而不是数组。 (当然,交换数组是不可能的。)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多