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