Предположим, у меня есть большой многоуровневый вектор. (Это просто пример для нескольких уровней содержащегося в ней объект дерева)Как эффективно работать с контейнером C++?
vector<vector<vector<int>>> vec1 = getBigVector();
Если мне нужно передать элемент, я думаю, что это приведет к своему роду копирование.
vector<vector<int>> vec2 = vec1[2];
vector<vector<int>> vec3 = vec1[3];
Не выглядит действительно эффективным, чем ссылка. Насколько я знаю, C++ обычно выбирается для его эффективности, и я слышал, что C++ предназначен для предпочтения объекта типа значения. Но верно ли это для контейнеров со многими элементами? Как насчет контейнера содержит другие контейнеры?
Есть ли скрытый секрет, который может сделать операцию эффективной? Или я должен просто ссылаться на него вместо копирования?
Update
Всего дерева объектов нуждается в частой мутации. И даже само дерево должно быть мутировано.
умные указатели возможно? –
Если вам не нужна модифицируемая копия этого элемента, ссылка на const будет, вероятно, вам интересно о производительности. Честно говоря, если эти векторы получат даже умеренно респектабельные размеры, вы были бы сумасшедшими * not * to. – WhozCraig
Если вам просто нужна ссылка на элементы в большом векторе, тогда сделайте именно это - используйте ссылку на элементы. Если вы хотите поместить элементы в другое место, у вас есть три варианта: вы можете скопировать элементы в новое место, вы можете переместить элементы в новое место или изменить свой дизайн, чтобы большой вектор содержал ' shared_ptr 'и делиться элементами между большим вектором и новым местоположением. – Mankarse