Быстрее поменять местами или присвоить вектор строк?

У меня есть класс с вектором строк и функция, которая назначает этот вектор. Я изменяю свою функцию, чтобы присвоить вектору только, если это успешно. Для этого я использую временный вектор строк в функции, а затем, если функция выполняется успешно, я назначаю вектор строк в классе.

Например:

class test
{
    vector<string> v;
    void Function()
    {
        vector<string> temp;
        v = temp; // Is this better?
        v.swap( temp ); // Or instead is this better?
    }
};

Спасибо

2 ответа

Решение

В C++11 переместите его:

v = std::move(temp);

На древних диалектах подкачка была бы лучше, чем назначение копии (при условии, что вектор не пустой, как в вашем примере).

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

С точки зрения сложности std::swap алгоритм должен быть предпочтительным.

vector<string> temp;
v = temp;           // complexity is linear in the size of the temp
v.swap( temp );     // complexity is constant
Другие вопросы по тегам