gpt4 book ai didi

c++ - 如何用STL算法代替for循环?

转载 作者:行者123 更新时间:2023-12-01 14:36:31 26 4
gpt4 key购买 nike

如何用 STL 算法替换 for 循环?这里我想把 vector valsvals[i]的值赋值给nodeList<中的nodeList[i]->val/。如果我使用 vals[i] * 2 来替换它呢?

#include <algorithm>
#include <iostream>
#include <vector>

using namespace std;

struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};

int main()
{
TreeNode node1(1);
TreeNode node2(2);
TreeNode node3(3);
node1.left = &node2;
node1.right = &node3;

vector<TreeNode*> nodeList = {&node1, &node2, &node3};
vector<int> vals = {1, 3, 2};
for (int i = 0; i < vals.size(); i++) {
nodeList[i]->val = vals[i];
// nodeList[i]->val = vals[i] * 2;
}
}

最佳答案

你在这里做什么,你是在同时遍历两个容器。

虽然在现代 C++ 中可以对单个容器进行非常巧妙的迭代,但我从内心深处不建议对两个容器进行迭代 - 尚未准备好。 This question列出了各种可能的解决方案,但我不太确定。

可以在手动维护第二个索引或迭代器的同时尝试范围循环:

  auto i = vals.begin();
for (auto & node: nodeList) {
node->val = *i++;
}

这是更少的代码,并且在迭代类似 std::deque 的东西时会更快,其中(与 std::vector 不同)直接索引是昂贵的。但保留代码原样并等待下一个 C++ 标准也可能是合理的。

关于c++ - 如何用STL算法代替for循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63575517/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com