C++ C++;前向迭代器算法
下面是一个简单的程序,可以打印一个小整数范围内的矢量位置C++ C++;前向迭代器算法,c++,C++,下面是一个简单的程序,可以打印一个小整数范围内的矢量位置 int mynumbers [] = { 3, 9, 0, 2, 1, 4, 5 }; vector<int> v (mynumbers, mynumbers + 7); int m1[] = {9, 0, 2 }; vector<int>::iterator it = find_end (v.begin(), v.end(), m1, m1+3); if (it != v.end()) cout <
int mynumbers [] = { 3, 9, 0, 2, 1, 4, 5 };
vector<int> v (mynumbers, mynumbers + 7);
int m1[] = {9, 0, 2 };
vector<int>::iterator it = find_end (v.begin(), v.end(), m1, m1+3);
if (it != v.end())
cout << "Found at position: " << it-v.begin() << endl;//LINE I
intmynumbers[]={3,9,0,2,1,4,5};
向量v(mynumbers,mynumbers+7);
int m1[]={9,0,2};
向量::迭代器it=find_end(v.begin(),v.end(),m1,m1+3);
如果(it!=v.end())
cout它是一个迭代器,它表示对象所在的位置
关于it+v.begin()。当你把加州的位置加上纽约的位置,你会得到什么?这个问题毫无意义
但是,您可以测量两个位置之间的距离:it-v.begin()
。我不确定你到底在问什么,但我希望能涵盖它。简单的答案是有一个为b-a
定义的操作,其中b
和a
具有相同的迭代器类型,但没有为b+a
定义任何操作
资料来源:
非规范性:参考文献
规范性:N4140,[random.access.iterators]表111
但我认为你在问题中提到的距离就是你的实际解决方案:
这就是你的情况:
begin() --> 3
it --> 9
0
2
1
4
5
begin()-->3
它-->9
0
2.
1.
4.
5.
distance(v.begin(),it)
将告诉您这两个指针之间的距离。(在本例中为1)
现在请记住,在引擎盖下距离
将执行与本例相同的减法
你应该这样想,v.begin()
是地址,it
也是地址
v.begin()
是0x0100
它是0x0104
当你减去它们时,你会得到(0x0104-0x0100)/sizeof(int)
,所以你会得到1。这样的操作会做什么?它没有意义,也不会编译。我认为这是一场胜利。有什么问题吗?这似乎类似于问为什么dos#&*$#%ifosidfjsdo代码>无法编译。为什么同时使用数组和std::vector?添加两个指针意味着什么?像int*p;p-p;/*好的*/p+p;/*错误*/
“函数find\u end
返回正向迭代器”函数模板find\u end
至少返回正向迭代器。实际上,它的返回类型与其第一个参数的类型相同。由于vector::iterator
是一个随机访问迭代器,因此此find_end
函数模板专门化也会返回一个随机访问迭代器。
begin() --> 3
it --> 9
0
2
1
4
5