以下哪个会更有效率?

时间:2018-05-26 16:30:15

标签: c++ performance c++11 stdvector

我编写了如下代码:

#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;
}

我可以在没有lambda函数的情况下重写上面的内容,如下所示:

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. 如果是这样,你建议我做哪种方式?
  3. 感谢您的时间。

1 个答案:

答案 0 :(得分:2)

以下是副本:

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

应该是

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

然后两个代码都是等价的。

请注意,您甚至可以移动字符串以避免字符串副本。

相关问题