3.1 命名空间的using声明

using声明是对某个命名空间做引入。主要作用是简化代码编写。

比如用cout的三种方式:

using namespace std;
using std::cout;
std::cout<<s;

3.2 标准库string类型

定义和初始化

#include <string>
using std::string

string s1 ;  // 调用默认构造函数初始化对象

strng s2(s1) ; // 将S2初始化为S1的一个副本

string s3("value") ; // 用一个字符串值初始化对象

string s4(n,'c') ; // 用N个字符‘C’组成字符串作为初始化s4的值

string对象的读写

cin>>str;  读取并忽略开头所有空白字符(空格,换行符,制表符),直到再次遇到空白字符为止

getline(cin,str)  以换行符为读取结束标志,但并不忽略开头换行符,如果第一个字符是换行符,置空

string对象的操作

s.empty() ;   // 判断s是否为空,相当于s.size()==0
s.size() ;       // s的长度
s[n] ;            // n位置的字符(左值返回)
s1+s2 ;         // 返回s1和s2连接的串
s1=s2 ;         // 把s1替换为s2的副本
s1==s2 ;      // 判断s1,s2是否相等
!=,<,<=,>,>=    // 按字典顺序比较  若一个字符串为另一个的前缀,这长度长的大

size操作返回string::size_type()类型,不要把size返回的结果赋给一个int变量,string类型下标操作也需要用size_type类型

为什么不用int而新创造一个类型呢,原因有如下两点:

1. 取值范围不同,int有固定的取值范围,并且可以取负数,但字符串长度是不可能为负的,并且长度的大小很可能会超过int的范围而导致溢出

2. int的范围大小与机器相关,有的机器上范围大些,有点机器小一些。但是字符串长度应该是个不能随机器发生大小改变的值,所以即使用无符号int来表示串大小也是不合适的

这种思想是配套类型,很多库中都用到

字符串字面值的连接,+操作符的左右操作数必须至少有一个string类型

string s1 = "hello" + s2

string s3 = "hello" + "world"  错

cctype

isalnum(c) ; // 假如c是字母或数字,则为true

isalpah(c) ;  // 假如c是字母,则为true

iscntrl(c) ;   // 假如c是控制字符,则为true

isdigit(c) ;   // 假如c是数字,则为true

isgraph(c) ; // 假如c不是空格,则为true

islower(c) ; // 假如c是小写字母,则为true

isprint(c) ;  // 假如c是可打印的字符,则为true

ispunct(c) ; // 假如c是标点符号,则为true

isspace(c) ; // 假如c是空白字符,则为true

isupper(c) ; // 假如c是大写字母,则为true

isxdigit(c) ; // 假如c是十六进制数,则为true

tolower(c) ; // 假如c是大写字母,则返回小写字母形式(对应的int值),否则返回c。

toupper(c) ;// 假如c是小写字母,则返回大些字母形式(对应的int值),,否则返回c。

3.3 标准vector类型 

3.4 迭代器简介

c++ primer 9 顺序容器

强调几点:

1. 容器下标不能用作添加元素,只能用作获取元素,仅能对已存在的元素进行下标操作

2. const_iterator自身能改变,指向的值不能修改,注意与const类型的iterator的区别

 vector<string>::const_iterator iter  // 定义一个代表常量的迭代器,和普通迭代器唯一不同的就是不能通过解引赋值

 *iter = "new value";                 // 这是不允许的,因为const_iterator告诉编译器我代表的是一个常量,所以不能通过任何手段改变其值

 const vector<string>::iterator iter  // 定义一个常迭代器,迭代器代表的变量,但迭代器本身是常量,所以可以更改代表的内容但无法更改迭代器

 *iter = "new value";                 // 没问题
iter ++ // 不允许,迭代器是常量所以无法让他指向其他项 const vector<string>::const_iterator iter // 这样定义的迭代器只能读取初始化指向的列表项内容,既无法向后移动迭代器也无法更改项值内容

3. 迭代器的算术操作有两种:加上或减去一个整数值,两个迭代器相减,但绝对没有两个迭代器相加

习题3.14 把vector<string> 中的小写变大写

 #include <iostream>
using namespace std;
#include <vector>
#include <cctype>
#include <string> int main()
{
vector<string> vec;
string str;
cout<<"enter some string(ctrl + z to end)"<<endl;
while(cin>>str)
vec.push_back(str); vector<string>::iterator ite;
for(ite = vec.begin();ite != vec.end();ite++)
{
for(int i = ;i < (*ite).size();i++)
(*ite)[i] = toupper((*ite)[i]);
cout<<*ite<<" ";
}
cout<<endl; getchar();
return ;
}

3.5 标准bitset类型

看书

c++ primer 3 标准库类型的更多相关文章

  1. Primer回顾 标准库类型

    string类型的输入操作符: 1.读取并忽略开头所有的空白字符(如空格,换行符,制表符). 2.读取字符直至再次遇到空白字符,读取终止.   用getline读取整行文本 getline.接受两个参 ...

  2. C++ Primer 笔记——标准库类型string

    1.如果使用等号初始化一个变量,实际上执行的是拷贝初始化,编译器吧等号右侧的初始值拷贝到新创建的对象中去:如果不使用等号则执行的是直接初始化. std::string str = "Test ...

  3. C++ Primer 第三章 标准库类型vector+迭代器iterator 运算

    1.vector: 标准库类型vector表示对象的集合,其中所有对象的类型都相同,集合中的每个对象都有一个与之对应的索引,索引用于访问对象.因为vector“容纳着”其他对象,所以它也常被称作容器( ...

  4. C++ Primer 第三章 标准库类型string运算

    1. 标准库类型 string string表示可变长的字符序列,使用string必须首先包含string头文件.如何初始化类的对象是由类本身决定的. int n; string s1;//默认初始化 ...

  5. C++ Primer笔记1_转义字符_标准库类型string_标准库类型vector

    1.转义字符 一般有两种方式: \x后紧跟1个或多个十六进制数字.或\后紧跟1.2.3个八进制数字,当中数字部分是字符相应的数值. #include <iostream> using na ...

  6. C++primer第三章标准库类型

    除第二章介绍的基本数据类型外,C++ 还定义了一个内容丰富的抽象数据类型标准库. 本章将介绍标准库中的 vector.string 和 bitset 类型. string 类型支持长度可变的字符串 v ...

  7. C++ Primer 学习笔记_6_标准库类型 -- 命名空间using与string类型

     标准库类型(一) --命名空间using与string类型 引: 标准库类型是语言组成部分中更主要的哪些数据类型(如:数组.指针)的抽象! C++标准库定义的是高级的抽象数据类型: 1.高级:由 ...

  8. C++ 标准库类型-String,Vector and Bitset

    <C++ Primer 4th>读书摘要 最重要的标准库类型是 string 和 vector,它们分别定义了大小可变的字符串和集合.这些标准库类型是语言组成部分中更基本的那些数据类型(如 ...

  9. 标准库类型vector

    标准库类型vector表示对象的集合,其中所有对象的类型都相同.集合中的每个对象都有一个与之对应的索引,索引用于访问对象.因为vector“容纳着”其他对象,所以它被称为容器. 要想使用vector, ...

随机推荐

  1. 学习 opencv---(11)OpenC 边缘检测:Canny算子,Sobel算子,Laplace算子,Scharr滤波器

    本篇文章中,我们将一起学习OpenCV中边缘检测的各种算子和滤波器——Canny算子,Sobel算子,Laplace算子以及Scharr滤波器.文章中包含了五个浅墨为大家准备的详细注释的博文配套源代码 ...

  2. IO多路复用之epoll(二)

    前一篇介绍了epoll的LT模式,LT模式注意epollout事件在数据全部写成功后需要取消关注, 或者更改为EPOLLIN. 而这次epoll的ET模式,要注意的是在读和写的过程中要在循环中写完或者 ...

  3. git入门篇shell

    什么是shell 在计算机科学中,Shell俗称壳,用来区别于Kernel(核),是指“提供使用者使用界面”的软件(命令解析器),它类似于windows系统下的cmd.exe, 它接收用户命令,然后调 ...

  4. zoj 3229 Shoot the Bullet(有源汇上下界最大流)

    Shoot the Bullethttp://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=3442 Time Limit: 2 Second ...

  5. Linux高级编程--02.gcc和动态库

    在Linux环境下,我们通常用gcc将C代码编译成可执行文件,如下就是一个简单的例子: 小实验:hello.c #include <stdlib.h> #include <stdio ...

  6. 重构改善既有代码设计--重构手法15:Remove Middle Man (移除中间人)

    某个类做了过多的简单委托动作.让客户直接调用受托类. 动机:在Hide Delegate (隐藏委托关系)的“动机”中,谈到了“封装委托对象”的好处.但是这层封装也是要付出代价的,它的代价是:每当客户 ...

  7. 使用chardet判断编码方式

    1. chardet是什么 chardet是python中比较常用的一个编码方式检测库,需要注意的是它只检测并返回检测结果,并不负责对原数据做什么处理. 可以使用PIP命令安装: pip instal ...

  8. css3旋转、过渡、动画属性

    1.transform 该属性对元素进行旋转.缩放.移动和倾斜 translate元素从当前位置移动 rotate元素顺时针旋转 scale元素的尺寸增大或减小 skew元素翻转 2.transiti ...

  9. 五. Jmeter--HTTP Cookie Manager

    1. 添加HTTP Cookie Manager 2.添加登录login http,request info 和 HTTP Header Manager 中的信息是从fiddler中拿的, 至于hea ...

  10. 转: oracle中schema指的是什么?

    看来有的人还是对schema的真正含义不太理解,现在我再次整理了一下,希望对大家有所帮助. 我们先来看一下他们的定义:A schema is a collection of database obje ...