Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.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/1/list/4.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++ 将STL列表迭代器传递给函数_C++_List_Iterator - Fatal编程技术网

C++ 将STL列表迭代器传递给函数

C++ 将STL列表迭代器传递给函数,c++,list,iterator,C++,List,Iterator,我不明白为什么我必须增加/减少列表迭代器才能使这个函数调用工作。有没有一种不那么复杂的方式来称呼这个?参考嵌套for循环,“insertDDNode(*(-DD_-it),*(++DD_-it),data[j-i],data[j+1]);”段 void insertDDNode(DataNode*l,DataNode*r); 矢量数据; 列出滴滴涕; int main() { 无符号整数n=5; //将数据插入到向量结构中 数据。推回(新的数据节点(0,-1,13)); data.push_ba

我不明白为什么我必须增加/减少列表迭代器才能使这个函数调用工作。有没有一种不那么复杂的方式来称呼这个?参考嵌套for循环,“insertDDNode(*(-DD_-it),*(++DD_-it),data[j-i],data[j+1]);”段

void insertDDNode(DataNode*l,DataNode*r);
矢量数据;
列出滴滴涕;
int main()
{
无符号整数n=5;
//将数据插入到向量结构中
数据。推回(新的数据节点(0,-1,13));
data.push_back(新的数据节点(1,0,2));
数据。推回(新的数据节点(2,2,-14));
数据。推回(新的数据节点(3,4,18));
data.push_back(新的数据节点(4,5,67));
数据。推回(新的数据节点(5,6,91));
向量::迭代器it=data.begin();
列表::迭代器DD_it;
while(it!=data.end())
{
insertDDNode(*it,*(it+1));
it++;
if((*it)->i==data.back()->i){break;}
}
DD_it=DDT.begin();
对于(int i=1;iy-左->y)/(右->x-左->x);
DDT.推回(新DDNode(*左,*右,div_diff));
左->右->左->滴滴涕.back();
}

该程序是否编译并运行?行
插入ddnode(*(-DD_it),*(++DD_it),data[j-i],data[j+1])
具有不可预测的行为,因为您不能依赖于函数调用参数的求值顺序。@AndyBrowl,根据标准,这被称为
未定义行为
,并且大多数时候都是这样引用的。@vonbrand:不,它不是UB。UB意味着实现可以自由做任何事情。在这里,唯一未知的是参数的求值顺序。如果迭代器是内置类型,那么您是对的。@AndyProwl,这是未定义的行为。编译器可以假设没有人做这种胡说八道的事情,并因此选择它认为合适的操作顺序。也就是说,没有定义将发生什么,这就是“未定义行为”的定义。
void insertDDNode(DataNode *l, DataNode *r);
vector<DataNode*> data;
list<DDNode*> DDT;

int main()
{
  unsigned int n = 5;
  // insert data into vector structure
  data.push_back(new DataNode(0, -1, 13));
  data.push_back(new DataNode(1, 0, 2));
  data.push_back(new DataNode(2, 2, -14));
  data.push_back(new DataNode(3, 4, 18));
  data.push_back(new DataNode(4, 5, 67));
  data.push_back(new DataNode(5, 6, 91));
  vector<DataNode*> :: iterator it = data.begin();
  list<DDNode*> :: iterator DD_it;

  while(it != data.end())
  {
    insertDDNode(*it, *(it+1));
    it++;
    if((*it)->i == data.back()->i){break;}
  }

  DD_it = DDT.begin();
  for (int i = 1; i < n; i++)
  {
    for (int j = i; j < n; j++)
     {
       insertDDNode(*(--DD_it), *(++DD_it), data[j-i], data[j+1]);
       DD_it++;
     }
    DD_it++;
  }
}

void insertDDNode(DataNode *left, DataNode *right)
{
  T div_diff = (right->y - left->y) / (right->x - left->x);
  DDT.push_back(new DDNode(*left, *right, div_diff));
  left->r = right->l = DDT.back();
}