Быстрее поменять местами или присвоить вектор строк?
У меня есть класс с вектором строк и функция, которая назначает этот вектор. Я изменяю свою функцию, чтобы присвоить вектору только, если это успешно. Для этого я использую временный вектор строк в функции, а затем, если функция выполняется успешно, я назначаю вектор строк в классе.
Например:
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