我遇到的问题是置换的第一个结果正在输入到向量中,但是在下一个for_each
循环迭代中,向量的大小会将自身重置为{size = 0}
,而不是增加它的大小和插入第二个排列,等等。我该如何解决这个问题?我尝试过使用while循环,但我无法解决它的条件。
我也想问,因为稍后我将需要将此向量中的值与包含字典的向量进行比较,当前代码(正常工作时)是否允许我这样做。
到目前为止,这是我的代码:
for_each(permutations.begin(), permutations.end(), [](string stringPermutations)
{
vector<string> permutations;
permutations.push_back(stringPermutations);
cout << stringPermutations << endl;
});
显然,看起来lambda每次调用时都会创建一个新的本地矢量。如果我将vector<string> permutations;
放在lambda之外,我会收到permutations.push_back(stringPermutations);
的错误。那么我该如何从lambda中检索stringPermutations
并进入公共可访问的向量?
感谢您的帮助和反馈。
答案 0 :(得分:1)
在lambda之外声明向量并使用lambda capture来捕获此向量:
vector<string> permutation_v;
for_each(permutations.begin(), permutations.end(), [&](string stringPermutations)
// ^
{
permutation_v.push_back(stringPermutations);
cout << stringPermutations << endl;
});
但如果我是你,我会直接将这个载体构建为
vector<string> permutation_v{permutations.begin(), permutations.end()};
答案 1 :(得分:0)
目前还不清楚您希望使用代码实现什么,但似乎您只想打印permutations
的内容。
然后只需看看向量中的元素。
for (auto &permutation : permutations) std::cout << permutation << '\n';
问题是:为什么首先使用std::unordered_set<std::string>
而不是std::vector<std::string>
?那么你不需要将元素复制到一个新的向量中。