C++语言
-
迭代器、
- 迭代器是以一种遍历容器内元素的数据类型、类似于指针、
- 迭代器、指向容器中的某个元素、常用迭代器访问容器中的元素、和修改迭代器所指向的元素值、
-
容器的迭代器类型、
-
定义迭代器、
-
vector<int> a = { 1,2,3,4,5,6,7 }; vector<int>::iterator b;//定义迭代器、
-
b、便是迭代器、vector
::iterator 是迭代器的类型、专门在迭代器中使用的类型、不可更改、
-
-
-
迭代器begin()/end()操作、反向迭代器rbegin()/rend()操作、
-
begin()/end() 函数 作用返回迭代类型、
-
begin()返回一个迭代器类型、(返回一个迭代器)
-
vector<int> a = { 1,2,3,4,5,6,7 }; vector<int>::iterator b;//b是迭代器、 b = a.begin();
-
如果容器内有元素、则返回指向容器中的第一个元素、
-
-
end()返回一个迭代器类型、
-
vector<int> a = { 1,2,3,4,5,6,7 }; vector<int>::iterator b;//定义迭代器、 b = a.begin(); b = a.end();
-
end返回的是迭代器是指向末端元素的后面、也就是一个不存在的元素、
-
如果容器内为空的话、那么begin()h和end()返回的迭代器就相同、end相当于一个结束标记、迭代器遍历容器内容的话、会从begin开始、直到遇到end便提示遍历结束、
-
迭代器可以自加加、正向迭代器、从前往后读、
-
vector<int> a = { 1,2,3,4,5,6,7 }; for (vector<int>::iterator b=a.begin();b!=a.end();b++) { cout << *b << endl;//*b迭代器运算符、 }
-
-
-
-
rbegin()/rend()也是函数、作用是范围迭代类型、从后往前读、
-
反向迭代器定义、
-
vector<int> a = { 1,2,3,4,5,6,7 }; vector<int>::reverse_iterator b;//定义迭代器、
-
使用、
-
for (vector<int>::reverse_iterator b=a.rbegin();b!=a.rend();b++) { cout << *b << endl; }
-
-
-
-
迭代器运算符、
-
*b; 返回迭代器b所指向的引用、须保证迭代器指向有效的容器元素、不能指向end、因为end指向的是不存在的内容、
-
b++或者++b指向的是容器中的下一个元素、而— —b或者b - -则指向的是容器中的上一个元素、
-
引用结构体中的成员、
-
struct a { int f; }; vector<a>b; a c; c.f = 10; b.push_back(c); vector<a>::iterator e;//必须指向有效的元素、 e = b.begin();//指向第一个元素 cout << (*e).f << endl;//引用c的结构内容、或者使用 cout << e->f << endl;//使用指向运算符、
-
将对象赋值到容器中、使用的并不是同一段内存、
-
-
两个迭代器可以相减、相减代表的两个迭代器的距离、元素的距离、
-
-
const_iterator迭代器、
- const——常量、值不可以被改变、
- const_iterator迭代器表示的是这个迭代器所指向的元素值不能被改变、而非本迭代器本身不能改变、迭代器的本身可以改变、但指向可以变成常量而不改变
- 使用const_iterator后迭代器就会变成只读、
- 常量容器必须使用常量迭代器、
-
vector<int> a = { 1,2,3,4,5,6,7 }; for (vector<int>::const_iterator b=a.begin();b!=a.end();++b) { cout << *b << endl; }
-
cbegin()和cend()操作、
- 和begin\end类似、不过cbegin和cend返回的都是常量迭代器、
-
迭代器失效、
- 在使用容器的循环体中、不要改变容器的容量、任何容器都不要增加和删除内容、