C++ primer 学习笔记——迭代器
来源:互联网 发布:炫踪网络 编辑:程序博客网 时间:2024/05/08 01:39
迭代器与指针类似
只有string和vector等一些标准库类型有下标运算符
所以使用迭代器也能访问string对象字符和vector对象的元素
使用迭代器
auto b=v.begin,e=v.end();//end成员负责返回容器(或string) 尾元素的下一个位置 的迭代器,称为 尾后迭代器int arr[5]={0,1,2,3,4};vector<int> vec(begin(arr),end(arr));//数组初始化vector
迭代器与运算符
*it
#include<iostream>#include<string>using std::string;using std::cout;int main(){ string s("hello word"); if (s.begin() != s.end()) { auto it = s.begin(); *it = toupper(*it);//*it返回迭代器it所指向的元素的引用 } cout << s; return 0;}
it++
#include<iostream>#include<string>using std::string;using std::cout;int main(){ string s("hello word"); for (auto it = s.begin(); it != s.end() && !isspace(*it); ++it)//++it 使迭代器移动到下一个字符 //习惯使用 != 。所以标准迭代器都定义了!=而不是< *it = toupper(*it); cout << s; return 0;}
(*it).num 和it->num 意思相同//解引用
解引用迭代器可获得迭代器所指向的对象,如果对象类型为类,有可能希望进一步访问其成员
//3.22对每个字符改成大写#include<iostream>#include<vector>#include<string>using std::string;using std::vector;using std::cout;using std::endl;int main(){ vector<string> v{ "hi", "i", "am", "amy" }; for (auto it = v.begin();it != v.end(); ++it) { for (auto &s1 = it->begin();s1 != it->end(); s1++) //s1为string的迭代器,使用引用来改变字符串字符 { *s1 = toupper(*s1); } } for (auto c : v) cout << c << " "; return 0;}
迭代器类型
vector<int>::iterator it;string::iterator it2;vector<int>::const_interator it3;string::const_interator it4;
每个容器类定义一个名为interator的类型,该类型支持迭代器类型的一系列操作
end与begin运算符的返回值
vector<int> v;auto it1=v.begin();//auto 为 vector<int>::interator
使用迭代器运算——二分搜索
#include<iostream>#include<vector>using std::vector;using std::cout;using std::endl;int main(){ vector < int > num{0,1,2,3,4,5,6,7,8,9 }; int sought; std::cin >> sought; auto begin = num.begin(); auto end = num.end(); auto mid = num.begin() + (end-begin) / 2; while (mid != end && *mid != sought) { if (*mid < sought) begin = mid+1; else end = mid ; mid = begin+(end - begin) / 2;//新的中点 //mid = (begin + end) / 2;/*Error 1 error C2678: binary '+' : no operator found which takes a left-hand operand of type 'std::_Vector_iterator<std::_Vector_val<std::_Simple_types<int>>>' (or there is no acceptable conversion) h:\c++\project\11.5\11.5\erfensousuo.cpp 21 1 11.5*///+重载运算符的左右操作数类型不符合 } cout << *mid; return 0;}
0 0
- C++PRIMER学习笔记
- c++primer学习笔记
- c++primer学习笔记
- C++primer学习笔记
- c++primer 学习笔记
- C++Primer 学习笔记
- c++primer学习笔记
- C++Primer学习笔记
- C++PRIMER 学习笔记
- C++Primer学习笔记
- C++Primer学习笔记
- C++Primer学习笔记
- c++primer学习笔记
- c++primer学习笔记-----3.4迭代器介绍
- C++Primer学习笔记——第一部分 基本语言
- C++Primer学习笔记——初窥输入/输出
- C++primer第五版【学习笔记】——第一章
- C++primer学习笔记——引用和指针
- 房屋中介信息管理平台
- Linux memcached安装
- const T、const T*、T *const、const T&和const T*&的区别
- SelectionSort -- 选择排序(C++)
- Android Studio 学习笔记
- C++ primer 学习笔记——迭代器
- MAC 下 安装 MAMP的PHP redis扩展
- strcpy和strlen找错
- [Gradle] 在 Eclipse 下利用 gradle 构建系统
- Mantle 简单使用
- IOS 本地推送通知
- [Leetcode]Combination Sum II
- 静态局部变量
- iOS从工程中移除storyBoard,以swift为例子