Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.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++ - Fatal编程技术网

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