我编写了如下代码:

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

看起来比第一个要少的代码。现在的问题是
  • 这两种方式之间是否存在效率差异,请考虑到query可以达到最大整数数值限制。
  • 如果是这样,您会建议我采取上述哪种方式?

  • 谢谢你的时间。

    最佳答案

    下面是一个副本:

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

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

    那么这两个代码将是等效的。

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

    关于c++ - 遵循以下哪种方法更有效?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50544849/

    10-12 20:41