如何在结构中使用stl中的容器而不进行复制

时间:2019-06-23 21:23:04

标签: c++ struct stl

我正在解决段树的问题。它有一个非常严格的内存限制,所以我不想使用额外的n个内存来记住有关单个段的信息,并从我从中构建树的数组中返回它。

...
struct SegTree {
    vector<int>* singleElements;
    vector<int> tree;
    SegTree() : singleElements(nullptr) {}
    SegTree(vector<int>* arr) : singleElements(arr) {
        tree.resize(arr.size() - 1);
        build(...);
    }
    ...
}
int main() {
    vector<int> a(10, 1), b(10, -1);
    SegTree st1(a);
    SegTree st2();
    st2.assign(b);
    return 0;
}

我不确定c ++的这一部分。对不起,我的英语不好。

1 个答案:

答案 0 :(得分:0)

您应该使用移动构造函数,而不是复制一个。

SegTree(std::vector<int> && arr);

并以这种方式调用它:

SegTree st1(std::move(a));

注意! 此后,“ a”向量处于未指定状态,因此无法对其进行操作。 看看文件!

cpp documentation