C ++将置换结果插入向量中

时间:2018-05-06 06:04:56

标签: c++ visual-c++ lambda

我遇到的问题是置换的第一个结果正在输入到向量中,但是在下一个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并进入公共可访问的向量?

感谢您的帮助和反馈。

2 个答案:

答案 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>?那么你不需要将元素复制到一个新的向量中。