我编写了如下代码:
#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
可能达到最大整数数字限制。感谢您的时间。
答案 0 :(得分:2)
以下是副本:
type tempVec = { xName, yName };
answer.emplace_back( tempVec );
应该是
type tempVec = { xName, yName };
answer.emplace_back( std::move(tempVec) );
然后两个代码都是等价的。
请注意,您甚至可以移动字符串以避免字符串副本。