Как использовать контейнер из stl в структуре без копирования - PullRequest
0 голосов
/ 24 июня 2019

Я решаю проблему с деревом сегментов.У него очень строгий лимит памяти, поэтому я не хочу использовать дополнительную 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;
}

Я не являюськонечно с этой частью с ++.Извините за мой плохой английский.

1 Ответ

0 голосов
/ 24 июня 2019

Вы должны использовать движущийся конструктор, а не копировать его.

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

И назовите это так:

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

Обратите внимание! После этого вектор 'a' находится в неопределенном состоянии, поэтому вы не можете оперировать им. Взгляните на документацию!

cpp документация

...