Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/163.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;:如何遍历指向指针数组的双指针_C++_Arrays_Pointers_Memory Management_C++17_C++03 - Fatal编程技术网

C++ C++;:如何遍历指向指针数组的双指针

C++ C++;:如何遍历指向指针数组的双指针,c++,arrays,pointers,memory-management,c++17,c++03,C++,Arrays,Pointers,Memory Management,C++17,C++03,在下面的代码中,我将遍历指向TreeNode对象指针数组的指针。下面是我迭代数组的代码: TreeNode* childListPointer = *currNode->children; for (TreeNode* currChild = childListPointer; currChild != NULL; currChild = ++childListPointer) { std::cout << "Iteration" <<

在下面的代码中,我将遍历指向TreeNode对象指针数组的指针。下面是我迭代数组的代码:

TreeNode* childListPointer = *currNode->children;


for (TreeNode* currChild = childListPointer; currChild != NULL; currChild = ++childListPointer) {
    std::cout << "Iteration" << endl;
}
然而,我的代码总是陷入无限循环,即使数组的长度是一个小数字(e.x.4或5)


注意:autograder系统不允许我修改TreeNode结构

您的数组是一个大小和计数

int num_children;
TreeNode **children;
基于此,您可以为(:)循环制作一个简单的范围适配器:

template<class It>
struct range {
  It s, f;
  It begin() const { return s; }
  It end() const { return f; }
  range(It b, It e):s(b),f(e) {}
  range(It b, std::ptrdiff_t count):range(b, b+count) {}
};
因为添加了“扣减指南”

你就完了。现在,您可以迭代子对象,而不必执行任何指针算术,也不会感到困惑

如果你陷入困境,你可以:

for (int i = 0; i < currNode->num_children; ++i)
{
  TreeNode* child = currNode->children[i];
  std::cout << "Iteration" << endl;
}
for(int i=0;inum_children;++i)
{
TreeNode*child=currNode->children[i];
性病:儿童数量;
for(;it!=end;++it)
{
TreeNode*child=*it;

std::cout
currChild!=NULL
这将始终是
true
。感谢您的快速响应:D.是否有任何方法可以在不修改TreeNode结构的情况下迭代双指针数组?@adamle该类型和函数不是
TreeNode
的一部分。它们只是您编写和使用的实用函数。
TreeNode
完全不变。
for(TreeNode* child : range{ currNode->children, currNode->num_children })
{
  std::cout << "Iteration" << endl;
}
template<class It>
range<It> make_range( It b, It e ) { return {b,e}; }
template<class It>
range<It> make_range( It b, std::ptrdiff_t c ) { return {b,c}; }

for(TreeNode* child : make_range( currNode->children, currNode->num_children ))
{
  std::cout << "Iteration" << endl;
}
for (int i = 0; i < currNode->num_children; ++i)
{
  TreeNode* child = currNode->children[i];
  std::cout << "Iteration" << endl;
}
TreeNode** it = currNode->children;
TreeNode** end = it+currNode->num_children;
for (; it != end; ++it)
{
  TreeNode* child = *it;
  std::cout << "Iteration" << endl;
}