gpt4 book ai didi

c++ - 如何使用 Boost C++ 遍历递归变量 vector

转载 作者:太空宇宙 更新时间:2023-11-04 14:08:25 25 4
gpt4 key购买 nike

我想构建一个构造如下的 vector 树

struct myStruct {
int a;
string b;
};

typedef boost::make_recursive_variant<
myStruct *
, std::vector< boost::recursive_variant_ >
>::type myStruct_tree;

如果我附加多个 vector ,并在这些 vector 中附加 vector ,我将如何使用某种位置 vector 遍历树

vector<int>

它在 vector 指针树中定义的每个 vector/子 vector 中定位对象位置。

最佳答案

我不是 100% 确定我理解您的问题,所以如果我有任何错误,请澄清。我假设 vector 是一条路径,每个元素都给出要移动到的元素的索引。考虑到这一点,我会尝试这样的事情:

myStruct_tree t = ...;

myStruct_tree* tit = &t;
for(iterator pit=path.begin(); pit!=path.end(); ++pit)
{
// retrieve branches at current position
vector<myStruct_tree>& vec = get<2>(*tit);

// get next position in tree, will throw on bad index
tit = &vec.at(*pit);
}
assert(tit);

// retrieve the leaf at the final position
myStruct* res = get<1>(*tit);

注意事项:

  • 使用无符号整数作为索引对我来说更自然一些。
  • vector::at() 在超出范围时抛出异常。
  • 我还没有查找有关如何获取变体元素的确切语法。随着版本 get<1>(*tit);我在上面使用过,我的意思是检索第一个元素的那个(即 myStruct 指针)。此外,它应该是返回引用或抛出错误以处理错误的对象。
  • 考虑用您自己的代码替换范围检查,以便提供更好的诊断。我这样做并不是为了保持算法的结构清晰。

关于c++ - 如何使用 Boost C++ 遍历递归变量 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15907187/

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