Что будет более эффективным в следующем? - PullRequest
0 голосов
/ 26 мая 2018

Я написал код следующим образом:

#include <iostream>
#include <vector>
using type = std::vector<std::string>;

int main()
{
    int query = 5;

    std::vector< type > answer;  
    answer.reserve(query);

    auto vecReturn = [](const std::string& x, const std::string& y) -> decltype(auto)
    {
        std::vector<std::string> tempVec = {x, y};
        return tempVec;     // removed std::move() from here
    };

    while(query--)
    {
        std::string xName, yName;
        std::cin >> xName >> yName;
        answer.emplace_back( vecReturn(xName, yName) );
    }

    return 0;
}

Я могу переписать вышеупомянутое без лямбда-функции, что-то вроде следующего:

using type = std::vector<std::string>;
int query = 5;
std::vector< type > answer;  // group set
answer.reserve(query);

while(query--)
{
    std::string xName, yName;
    std::cin >> xName >> yName;

    type tempVec = { xName, yName };
    answer.emplace_back( tempVec );
}

Который выглядит намного меньше кода, чем первыйодин.Теперь возникает вопрос:

  1. Есть ли разница эффективности между этими двумя способами, учитывая, что query может достигать максимального целочисленного числового предела.
  2. Если да, то каким из вышеперечисленных способов вы бы мне посоветовали?

Спасибо за ваше время.

1 Ответ

0 голосов
/ 26 мая 2018

Копирование выполняется следующим образом:

type tempVec = { xName, yName };
answer.emplace_back( tempVec );

Это должно быть

type tempVec = { xName, yName };
answer.emplace_back( std::move(tempVec) );

, тогда оба кода будут эквивалентны.

Обратите внимание, что вы даже можете переместитьстрока, чтобы избежать копирования строки.

...