C++ 如何使用基于范围的for循环迭代器?

C++ 如何使用基于范围的for循环迭代器?,c++,loops,pointers,auto,C++,Loops,Pointers,Auto,我有一个插入排序算法的代码,我想知道是否有一个基于范围的for循环等价于我正在使用的for循环 与常规STL容器迭代器相比,我对基于范围的循环迭代器的工作方式有点困惑。简单地用代替(auto-it:x)显然是行不通的 我的问题主要是如何取消对基于范围的迭代器的引用以获得相应的数组值。 这是我的插入排序代码: 对于(自动it=x.begin();it!=x.end();it++) { auto insertloc=std::上限(x.begin(),it,*it); 标准::旋转(插入定位,it

我有一个插入排序算法的代码,我想知道是否有一个基于范围的for循环等价于我正在使用的for循环

与常规STL容器迭代器相比,我对基于范围的循环迭代器的工作方式有点困惑。简单地用
代替(auto-it:x)
显然是行不通的

我的问题主要是如何取消对基于范围的迭代器的引用以获得相应的数组值。 这是我的插入排序代码:


对于(自动it=x.begin();it!=x.end();it++)
{
auto insertloc=std::上限(x.begin(),it,*it);
标准::旋转(插入定位,it,it+1);
}
这段代码运行得很好,但我只是想知道是否可以用基于范围的循环替换for循环

我想用一个基于范围的循环来代替for循环


这对您的用例不起作用。当您只需要通过取消引用迭代器获得的对象值时,循环的范围就起作用了。因为您在循环中使用的是迭代器,所以它不适用于您的案例。没有标准的机制可以从值中获取迭代器。

但是您使用
it
来旋转,对吗?似乎无论如何都需要查找它。for(auto-it:x)的
具有误导性,您不会得到迭代器
it
,而是序列的实际元素,因此您不可能在需要元素在序列中的位置的情况下使用它。也就是说,还不清楚您显示的代码是否有效,您的问题是要澄清这一点。另外,作为这里的新用户,当您只需要在集合上循环并使用集合中的每个项时,使用基于and read.Range的for循环非常有用。如果您需要索引或迭代器,请坚持使用for循环的标准。基于范围的for循环在循环体中不提供迭代器。如果
container
包含
int
类型的元素,则它提供值(例如
for(auto-element:container)
for(int-element:container)
或容器受影响元素的引用(例如
for(auto-element:container){element=5;}
可用于将容器的所有元素分配给
5
(如果允许))。如果在循环体中需要迭代器(您的示例就是这样),通常最好使用基于范围的循环以外的替代方法。