c/c++ 标准库 迭代器(iterator)
c/c++ 标准库 迭代器
begin和end运算符返回的具体类型由对象是否是常量决定,如果对象是常量,begin和end返回const_iterator;如果对象不是常量,返回iteraotor
### 1,但凡是使用了迭代器的循环体,都不要向迭代器所属的容器添加元素。
2,不能在范围for循环中向vector对象添加元素
标准库 迭代器(iterator)的小例子
test1~test8
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main(){
//test1
/*
string s("abc bdc");
auto it = s.begin();
while(it != s.end()){
*it = toupper(*it);
++it;
}
cout << s << endl;
*/
//test2
/*
string s("abd ddd");
for(auto it = s.begin(); it != s.end() && !isspace(*it); ++it){
*it = toupper(*it);
}
cout << s << endl;
*/
//test3 不可改变vector::const_iterator类型
/*
vector<int>:: iterator it;
vector<int>:: const_iterator it2;
vector<int> v(5,1);
it = v.begin();
it2 = v.begin();
vector<int> const cv(5,2);
//it = cv.begin();//it是可改变的vector::iterator,所以编译错误
for(auto s : v){
cout << s;
}
cout << endl;
*/
//test4 不可改变string::const_iterator类型
/*
string::iterator sit;
string::const_iterator sit2;
string s1("abc");
sit2 = s1.begin();
while(sit2 != s1.end()){
//*sit2 = toupper(*sit2);
cout << *sit2;
++sit2;
}
cout << endl;
*/
//test5 cbegin和cend,返回const类型的iterator
/*
string s1("aaaa");
auto it1 = s1.cbegin();
//*it1 = 'c';//不可以通过const类型的iterator改变原来的对象
cout << s1 << endl;
vector<int> v(4,2);
auto vit1 = v.cbegin();
//*vit1 = 5;//不可以通过const类型的iterator改变原来的对象
*/
//test6 string迭代器运算
/*
string s("abcd");
string s1("abc");
vector<int> v(5,3);
auto it1 = s.begin();
auto it2 = s.begin();
if(it1 == it2){
cout << "=" << endl;
}
++it1;
it1 += 1;
if(it1 > it2){
cout << ">" << endl;
cout << it1 - it2 << endl;
}
string::difference_type juli = it1 - it2;
cout << juli << endl;
*/
//test7 vector迭代器运算
/*
vector<string> s(4,"abcd");
vector<string> s1(5,"abc");
auto it1 = s.begin();
auto it2 = s.begin();
if(it1 == it2){
cout << "=" << endl;
}
++it1;
it1 += 1;
if(it1 > it2){
cout << ">" << endl;
cout << it1 - it2 << endl;
}
vector<string>::difference_type juli = it1 - it2;
cout << juli << endl;
*/
//test8 利用迭代器实现二分法
vector<string> v{"a","b","c","d","e"};
string target("b");
vector<string>::size_type idx = 0;
auto beg = v.begin();
auto mid = v.begin() + v.size() / 2;
auto end = v.end();
while(mid != end && *mid != target){
if(target < *mid)
end = mid;
else
beg = mid + 1;
mid = beg + (end - beg) / 2;
}
if(mid == end){
cout << "not found" << endl;
}
else{
idx = mid - v.begin();
cout << idx << ":" << *mid << endl;
}
}
c/c++ 标准库 迭代器(iterator)的更多相关文章
- STL标准库-迭代器适配器
技术在于交流.沟通,本文为博主原创文章转载请注明出处并保持作品的完整性 这次主要介绍一下迭代器适配器.以reverse_iterator(反向迭代器),insert_iterator(插入迭代器),o ...
- STL标准库-迭代器
技术在于交流.沟通,本文为博主原创文章转载请注明出处并保持作品的完整性 本节主要介绍STL六大部件中的Iterators迭代器. 在语言方面讲,容器是一个class template, 算法是一个仿函 ...
- PHP SPL标准库-迭代器
通过某种统一的方式遍历链表或者数组中的元素的过程叫做迭代遍历,这种统一的遍历工具我们叫做迭代器. PHP中迭代器是通过Iterator 接口定义的. ArrayIterator迭代器 foreach ...
- C++ Primer 第三章 标准库类型vector+迭代器iterator 运算
1.vector: 标准库类型vector表示对象的集合,其中所有对象的类型都相同,集合中的每个对象都有一个与之对应的索引,索引用于访问对象.因为vector“容纳着”其他对象,所以它也常被称作容器( ...
- C++标准库类型vector及迭代器iterator简介
Vector是C++标准库类型,称为容器,一个容器中的所有对象必须是同一种类型的.与数组相比,其最大的优点就是动态增长.Vector是一个类模板,并不是数据类型,而vector<int>和 ...
- 把《c++ primer》读薄(3-2 标准库vector容器+迭代器初探)
督促读书,总结精华,提炼笔记,抛砖引玉,有不合适的地方,欢迎留言指正. 标准库vector类型初探,同一种类型的对象的集合(类似数组),是一个类模版而不是数据类型,学名容器,负责管理 和 存储的元素 ...
- C++ Primer 有感(标准库vector及迭代器)
vector是同一种对象的集合,每个对象都有一个对应的整数索引值.和string对象一样,标准库将负责管理与存储元素相关的类存.引入头文件 #include<vector> 1.vecto ...
- C++标准库vector以及迭代器
今天看C++的书,出现了一个新的概念,容器vector以及容器迭代器. vector是同一种对象的集合,每个对象都有一个对应的整数索引值.和string对象一样,标准库将负责管理与存储元素相关的类存. ...
- C++标准库vector及迭代器
vector是同一种对象的集合,每个对象都有一个对应的整数索引值.和string对象一样,标准库将负责管理与存储元素相关的类存.引入头文件 #include<vector> 1.vecto ...
随机推荐
- 【原创】关于Git暂存区的理解
关于Git暂存区的理解 暂存区可以说是Git的三大重要的区域之一,另外两个分别是工作目录和Git仓库,所以说对暂存区的深入理解可以帮助我们理解很多Git命令背后隐藏的工作原理.今天,本文将以 ...
- 又是一个Notepad++的问题
昨天刚刚解决了Style Configurator无法保存的问题,今天继续解决另一个. 装好Notepad++之后,可以在右键菜单里面看到 Edit With Notepad++,win7里面挺好用的 ...
- 定时备份 MySQL 并上传到七牛
多数应用场景下,我们需要对重要数据进行备份.并放置到一个安全的地方,以备不时之需. 常见的 MySQL 数据备份方式有,直接打包复制对应的数据库或表文件(物理备份).mysqldump 全量逻辑备份. ...
- [转][Angularjs]$http.post与$.post
本文转自:https://www.cnblogs.com/wolf-sun/p/6878868.html 摘要 在angularjs发送post请求的时候,确实很困惑,在传递json数据的时候,总会遇 ...
- 第一册:lesson seventy three.
原文: The way to King Street. Last week Mrs. Mills went to London. She does not know London very well, ...
- CIL中间语言浅谈
CIL中间语言 通用中间语言(Common Intermediate Language,简称CIL)(曾经被称为微软中间语言或MSIL)是一种属于通用语言架构和.NET框架的低阶(lowest-lev ...
- ORA-00959: tablespace 'PSAPTEMP' does not exist
错误 : ORA-00959: tablespace 'PSAPTEMP' does not exist 解决办法: CREATE TEMPORARY TABLESPACE PSAPTEMP TEM ...
- 定时任务Task
使用注解@EnableScheduling开启定时任务,会自动扫描 定义@Component作为组件被容器扫描 对于EnableScheduling是注解在启动类上,很多开关配置都会再启动类中进行设置 ...
- 【redis】6、redis常用命令
[开启redis客户端,执行redis命令] redis-cli -h 192.168.1.27 -a HoomSun1 [批量执行redis命令.把命令写到txt中,批量执行] cat /t ...
- Netty 系列六(编解码器).
一.概念 网络传输的单位是字节,如何将应用程序的数据转换为字节,以及将字节转换为应用程序的数据,就要说到到我们该篇介绍的编码器和解码器. 将应用程序的数据转换为网络格式,以及将网络格式转换为应用程序的 ...