C++ 将排列结果插入 vector

标签 c++ visual-c++ lambda

我遇到的问题是排列的第一个结果被输入 vector ,但在下一个 for_each循环迭代 vector 的大小将自身重置为 {size = 0} ,而不是增加其大小并插入第二个排列,依此类推。我该如何解决这个问题?我试过使用 while 循环,但我不知道它的条件应该是什么。

我还想问一下,因为稍后我需要将此 vector 中的值与包含字典的 vector 进行比较,当前代码(在正常工作时)是否允许我这样做。

到目前为止,这是我的代码:

for_each(permutations.begin(), permutations.end(), [](string stringPermutations)
{
    vector<string> permutations;
    permutations.push_back(stringPermutations);
    cout << stringPermutations << endl;
});

很显然,每次调用 lambda 时,它总是会创建一个新的本地 vector 。如果我放置 vector<string> permutations;在 lambda 之外我得到一个错误 permutations.push_back(stringPermutations); .那么我该如何检索 stringPermutations离开 lambda 并进入公共(public)可访问 vector ?

感谢您的帮助和反馈。

最佳答案

在 lambda 外部声明 vector 并使用 lambda capture捕捉这个 vector :

vector<string> permutation_v;
for_each(permutations.begin(), permutations.end(), [&](string stringPermutations)
                                                 // ^
{
    permutation_v.push_back(stringPermutations);
    cout << stringPermutations << endl;
});

但如果我是你,我会直接将这个 vector 构造为

vector<string> permutation_v{permutations.begin(), permutations.end()};

关于C++ 将排列结果插入 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50196720/

相关文章:

c++ - scanf C++ 中的段错误

c++ - 使用 constexpr 数组作为模板非类型参数 (C++14)

python - 如何使用函数式编程迭代并找到列表中五个连续数字的最大乘积?

c++ - 将 "pass"函数模板作为通用可变参数 lambda 返回语句的好方法吗?

c++ - 如何将函数引用传递给参数

c++ - Qt - QTimeEdit 作为计时器查看器

c++ - Unordered_map 迭代器失效

c++ - 是否有用于 directx 9 c++ 的 irc 聊天室?

c++ - 在同一个程序中调用 srand() 两次

c++ - 非可变 lambda 函数 : are copy-captured variables allowed to be const?