в одном из моих приложений, у меня есть двойной вектор, STD::VECTOR<STD::VECTOR<STD::STRING>> List
, скажем, у меня есть два массива в списке. Первый массив содержит 55 элементов, а второй массив содержит 48 элементов. Теперь я должен сохранить первые 20 элементов в первом массиве List и отправить остальные 35 элементов во второй массив, чтобы сделать его 83 (35 + 48) элементов. Пожалуйста, предложите мне оптимизированный способ. Я пробовал ездить на велосипеде, но он забирал мне слишком длинный код и время. Пожалуйста, совет, если есть какой-либо прямой mentod для того же. Я использую код C++ в VS2010. Заранее спасибо.Двойной вектор изменения размера
-4
A
ответ
1
emplace_back(std::move(x))
- это самый эффективный способ сделать это.
Вот упрощенный пример:
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <iterator>
using namespace std;
int main()
{
vector<string> v1 { "The", "cat", "sat" };
vector<string> v2 { "My", "dog", "barks", "a", "lot", "on", "the", "mat" };
auto split = find(begin(v2), end(v2), "on");
for (auto i = split ; i != v2.end() ; ++i) {
v1.emplace_back(std::move(*i));
}
v2.erase(split, end(v2));
copy(begin(v1), end(v1), ostream_iterator<string>(cout, " "));
cout << endl;
copy(begin(v2), end(v2), ostream_iterator<string>(cout, " "));
cout << endl;
}
+0
Мне не пришло в голову использовать функции 'emplace' с' std :: move'. Ta. – Rook
+0
не забывайте стирать недействительные элементы из исходного списка после того, как вы их переместили (например, я сделал, прежде чем обновил свой ответ ...) –
Смежные вопросы
- 1. Вектор изменения размера в функции в C++
- 2. вектор двойной [2] ошибка
- 3. конвертировать вектор строки в двойной вектор 2-мерного массива
- 4. Как разделить вектор на двойной?
- 5. станд :: вектор изменения размера против резерва в течение FREAD
- 6. Вектор изменения размера после нажатия кнопки в QT
- 7. станд :: вектор изменения размера() работает только после сброса()
- 8. используя один и тот же вектор без изменения размера() части
- 9. Вектор постоянного размера
- 10. Вектор фиксированного размера
- 11. Изменение размера stxxl: вектор кэш
- 12. Вектор изменения вектора векторов
- 13. 6 элемент двойной точности вектор матрицы вектор умножения в AVX
- 14. Быстрый способ изменения размера вектора для правильного размера (C++)
- 15. Библиотеки изменения размера большого размера
- 16. Изменение размера 2d вектор - ошибка
- 17. Вектор с явным изменением размера
- 18. Как сделать вектор полученного размера?
- 19. Двойной список, элемент изменения невозможен
- 20. " Изменения в двойной кавычек
- 21. избежать окна изменения размера с двойным щелчком
- 22. Неожиданные изменения в станд :: вектор
- 23. Вектор изменения количества объектов класса
- 24. C++ конвертировать вектор <пара <двойной, двойной >> в double *, двойной *?
- 25. Векторная емкость после изменения размера
- 26. Анимация изменения размера, нажав на ссылку вместо изменения размера
- 27. Предложить изменения, чтобы внести изменения в функцию ввода размера
- 28. Вернуть вектор известного размера без дополнительной обертки?
- 29. Ошибка изменения размера
- 30. Предотвращение изменения размера окон
Это определенно не то, что у вас есть. Ваш код во всех шапках даст вам кучу неприятностей. Итак, покажи нам, что у тебя на самом деле. Покажите нам код, который вы написали, чтобы решить вашу проблему, и продемонстрируйте, где вы застряли. – Bart
Вопрос плохо задан, но действительно повышает достоверность вопроса о роли 'std :: move' и' emplace_back' в повышении эффективности. –
Я бы не назвал это «двойным вектором» ... Я предположил, что вы говорили о 'std :: vector', из названия. Более подходящими могут быть такие термины, как вложенные векторы или векторы векторов. –
Rook