string对象中每个字符的处理:

要用到 for(声明:表达式) 语句

比如简单的打印string str中每一个字符

---

string str("hello world!!!");

for(auto c: str)cout<<c<<endl;

(ps:这里auto 的意思是让编译器自己来决定c变量的类型)

---

再举一个例子统计string str的标点符号数目

string str("hello world!!!");

decltype(str.szie()) num_cnt = 0;

for(auto c : s)

if(ispunct(c)) ++num_cnt;

cout<<num_cnt<<" punctuation characters in "<<s<<endl;

(ps:这里decltype(str.size()) 是代表的str.size()声明类型,而str.size()的类型不是整型,而是一个无符号的其他类型。

然后使用 ispunct(char c)是包含在头文件cctype里面的。cctype 头文件里面有许多 isalnum判断是否数字,isalpha判断是否字母..etc)

----

那假如希望改变string str的字符呢?而不是仅仅进行统计和输出

这个例子是将str的全部变成大写字母!

string str("hello world!!!");

for(auto &c : str) c=toupper(c)

cout<<str<<endl;

(ps: 这里有个小变化for(auto c:str) 变成 for(auto &c:str)! 原来str 的每个字符 是复制给 auto c。所以即使你改变了auto c

也并没有改变str的每个字符!但是auto &c 没有,这里c是代表str 每个字符的引用而非副本。也就是c 是每个字符的另一个别名而已!

所以改变c 确实能够改变str 的字符!)

---

假如希望处理访问str 中某个特定的字符

-

下标:使用str[x] x是无符号数且小于等于size-1!

使用一个例子来介绍: 一个将十进制转成16进制的程序

const string hexdigits="0123456789ABCDEF";

string result;

string::size_type n;

cout<<"enter a series of numbers between 0 and 15 seperately with space"<<endl;

while(cin>>n)

if(n<hexdigits.size())

result+=hexdigits[n];

cout<<result;

-

迭代器:迭代器有点像指针,但又很有区别。在标准类型中从string 到 vector 都支持用迭代器访问容器中的一个元素。

并且许多其他的标准库定义的容器也支持:使用迭代器访问容器中的一个元素!

(只有极少数的才支持用下标法来访问容器里元素)

举个例子:将string容器(或者称string 对象)的第一个元素转变成大写

string str(hello,you bitch!);

if(s.begin() != s.end()){ auto it=s.begin(); *it=toupper(*it) ;}

it 是迭代器, 它指向s容器的第一个元素。它的类型我们不得而知所以命名它auto

*it 是s容器第一个元素的引用(别名)!

(

s.end()指向s容器尾元素下一个位置

s.begin()指向容器的第一个位置, s.begin==s.end时相当于s容器为空!

it++ 说明指向s容器的下一个元素

it-- 说明指向上一个元素

it->property 说明是元素的某一个属性,相当于(*it).property

)

-除了auto c=s.begin() 如何声明一个迭代器呢?

vector<int>::iterator i1;

string::iterator i2; 能读,修改 string容器的元素

vector<int>::const_iterator I1;

string::const_iterator I2; 仅仅能读string容器的元素

标准库类型Vector:

想用vector 先要 #include<vector> using std::vector

Vector如何初始化?

Vector支持三种初始化方法。

一种是用花括号的列表初始化  vector<int> v1{1,2,3}; 说明v1容器里有三个元素,分别是1,2,3

一种是用括号的元素数目初始化 vector<string> v1(10,"hi"); vector<string> v2(10);说明v1有10个hi的string串,v2有10个空串

一种是拷贝初始化 vector<string>v1=v2,vector<string>v1(v2)。vector<int> v0 v0是空容器!

Vector支持什么操作呢?

最重要Vector支持操作是向Vector添加元素!

vector<int> v2; //此时是一个空的v2容器

for(int i=0;i!=100;i++) v2.push_back(i);

还有其他操作:

v.empty() 判断空

v.size() 判断大小

v.push_back(t)添加元素t如容器V

v[n]返回容器v的第n个位置引用

v=v1,v={a,b,c..} 都是用右边的容器替换左边的v容器

v==v1,v!=v1,v>= > < <=v1 数目相等且每一个元素相等即==,容器之间第一对相异的元素决定容器大小关系!

转载于:https://www.cnblogs.com/zzzPark/p/6377708.html

标准库类型String,Vector相关推荐

  1. 谈谈两种标准库类型---string和vector

    两种最重要的标准库---string和vector string和vector是两种最重要的标准库类型,string表示可变长的字符序列,vector存放的是某种给定类型对象的可变长序列. 一.标准库 ...

  2. 标准库类型string的基本功能和使用

    标准库类型string的基本功能和使用 String基本知识 初始化 基本操作 范围for语句 string定义的迭代器及其他 关于下标操作 示例代码 练习3.6 cctype.cpp punctRe ...

  3. C++primer 第 3 章 字符串、向量和数组 3.1 命名空间的using声明 3.2标准库类型string

    引言 除了第2章介绍的内置类型之外,C++语言还定义了 -个内容丰富的抽象数据类型库.其中,string和 vector是两种最重耍的标准库类型,前者支持可变长字符串,后者则 表示可变长的集合.还有- ...

  4. C++ 标准库类型 string

    C++ 标准库类型 string 一.string 类型的使用和定义 1.使用 string 类型 标准库类型 string 表示可变长的字符序列 #include <string> us ...

  5. C++ primer三章二节标准库类型string

    标准库类型string 标准库类型string表示可变长的字符序列,使用#include<string>引入头文件,string定义在命名空间std中. 定义和初始化string对象 如何 ...

  6. c++ 标准库类型string

    标准库类型string string表示可变长的字符序列,使用string类型必须首先包含string头文件. 文章目录 一.定义和初始化string对象 二.操作string对象 三.处理strin ...

  7. 【C++学习笔记】标准库类型string

      标准库类型string表示可变长的字符序列,使用string类型必须先包含string头文件,string定义在命名空间std. #include <string> using std ...

  8. (复健计划)标准库类型string

    标准库类型string表示可变长的字符序列,使用string类型必须包含sring头文件<string>.作为标准库的一部分,string定义在命名空间,string定义在命名空间std中 ...

  9. C++ 标准库类型 string

    写在前面: 我是「虐猫人薛定谔i」,一个不满足于现状,有梦想,有追求的00后 \quad 本博客主要记录和分享自己毕生所学的知识,欢迎关注,第一时间获取更新. \quad 不忘初心,方得始终.自己的梦 ...

最新文章

  1. 操作系统学习笔记 第三章:处理机调度与死锁(王道考研)
  2. android 截屏指定区域,Android截图 截取ContentView 截取指定的View并且保存
  3. Spring Boot中@Autowired可以省略的情况
  4. ICMP协议个人分析
  5. React Suspense 尝鲜,处理前后端IO异步操作
  6. 禁用Android底部虚拟按键
  7. 【MTK Front Camera Bringup】
  8. 基于STM32采集CO2(MH-Z19C)传感器数据
  9. VSCode:C++ 无法跳转到函数定义
  10. GB28181国际标准监控对接web平台搭建
  11. Elasticsearch实战(十五)---查询query,filter过滤,结合aggs 进行局部/全局聚合统计
  12. 北京四季青租房-----隐藏在中介(安信嘉和)中的黑二房东--韩亮
  13. JAVA基础——第二章,变量,数据类型和运算符
  14. PyTorch中池化层的padding和ceil_mode参数设置
  15. 【刷题笔记】——day.6 有效的井字游戏
  16. 【Ray Trace from Groud Up】光线追踪代码实现解析
  17. 升级笔记本硬件并安装Debian的过程
  18. Lua下的ECS框架
  19. mysql.zip配置,MySQL zip包在Windows上的安装配置
  20. 经典问题解决办法(转)

热门文章

  1. 廉价raid_如何查找80行代码中的廉价航班
  2. ubuntu上使用sqlite3
  3. 明明知道银行存款会贬值,为什么还有那么多人把钱放在银行?
  4. DCASE 2013任务1(声学场景分类)参赛作品相关信息
  5. 从提香到戈雅:西班牙普拉多博物馆藏画展
  6. jquery获取html代码怎么写,jQuery从html代码中获取对应标签的写法
  7. 电脑关闭计算机怎么重启计算机,教您电脑关机后总是重启怎么办
  8. android 生命周期_Android生命周期组件 Lifecycle 源码详解(一)
  9. php与mysql列表_PHP+Mysql+jQuery实现的查询和列表框选择
  10. 干货 | 深度学习名词表:57个专业术语加相关资料解析(附论文)