2014-05-12 16 views
-4

в одном из моих приложений, у меня есть двойной вектор, STD::VECTOR<STD::VECTOR<STD::STRING>> List, скажем, у меня есть два массива в списке. Первый массив содержит 55 элементов, а второй массив содержит 48 элементов. Теперь я должен сохранить первые 20 элементов в первом массиве List и отправить остальные 35 элементов во второй массив, чтобы сделать его 83 (35 + 48) элементов. Пожалуйста, предложите мне оптимизированный способ. Я пробовал ездить на велосипеде, но он забирал мне слишком длинный код и время. Пожалуйста, совет, если есть какой-либо прямой mentod для того же. Я использую код C++ в VS2010. Заранее спасибо.Двойной вектор изменения размера

+3

Это определенно не то, что у вас есть. Ваш код во всех шапках даст вам кучу неприятностей. Итак, покажи нам, что у тебя на самом деле. Покажите нам код, который вы написали, чтобы решить вашу проблему, и продемонстрируйте, где вы застряли. – Bart

+0

Вопрос плохо задан, но действительно повышает достоверность вопроса о роли 'std :: move' и' emplace_back' в повышении эффективности. –

+0

Я бы не назвал это «двойным вектором» ... Я предположил, что вы говорили о 'std :: vector ', из названия. Более подходящими могут быть такие термины, как вложенные векторы или векторы векторов. – Rook

ответ

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

не забывайте стирать недействительные элементы из исходного списка после того, как вы их переместили (например, я сделал, прежде чем обновил свой ответ ...) –

Смежные вопросы