我编写了如下代码:
#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/