chapter 3 字符串,向量和数组

类型是C++编程的基础,类型规定了对象的存储要求以及所能执行的操作,C++提供了一套基础内置类型,类型分为常量以及非常量,一个常量对象必须初始化,一旦初始化就不能再改变。此外可以重复定义复合变量。复合类型以其他的类型为基础。

编写自己的头文件:

类一般不定义在函数体内,在函数体外部使用类的时候,在各个指定的源文件中只有一处为类的定义,并且在不同文件中使用同一个类,类的定义必须保持一致。

类通常定义在头文件中,类所在头文件的名字应该和类的名字一样。

3.1 命名空间以及using声明

目前为止,用到的库函数基本都属于命名空间std;

每个名字都需要独立的using声明:

头文件不包含using声明:由于头文件中的内容可以copy
到其他文件中去。

3.2
标准库类型string 

3.2.1 定义和初始化string
对象

直接初始化和copy初始化:string  s2=s1;string
s2(10,‘c‘);

3.2.2 string对象上的操作s.empty();s.size();
s[];s1+s2;s1=s2;s1==s2;s1!=s2;getline(is,s);os<<s;is>>s;

读写string对象:        
  
int
main()            
{string
s;                
  
cin>>s;        
         
cout<<s;
       
return 0;}      
读取的时候丛第一个字符开始到遇见下一个字符为止。

读取未知量的string对象:  
  

使用getline读取一整行:getline(cin,line)字符串中将会保留输入时的空白符。

string 的empty和size操作:string
对象.empty();string对象.size();

string::size_type 类型:string
对象.size()返回的类型。

string类以及标准库类型定义了几种配套的类型。配套的类型体现了标准库类型和机器无关的特性。size_type
是其中的一种。

比较string对象:两点字符相同比较长度,长度不一定的情况下比较第一个相异字符。

为string对象赋值:在设计标准类库的时候要向内置类型看齐。

两个string对象相加:

字面值和string对象相加:必须保证每一个+
两侧的运算对象至少要有一个是string。

3.2.3
处理string对象中的字符:

在cctype头文件中定义了一组标准库函数来改变某个字符的特征。

isalnum(c);isalpha();isdigit();isprint();iscntrl();isxdigit();isspace();toupper();tolower();isupper();islower();isgraph();ispunct();

如何处理每个字符? 使用for语句        
          
for(declaration:expression)
     
statement;

for语句可以遍历序列中的每个元素,并且对序列中的每个值执行相同的操作。

使用for语句改变字符串中的字符:如果改变一个string对象中的值,则必须把循环变量定义成为引用类型。

只处理string里的一部分字符:访问string对象里的字符有两种方法:1.使用下标2.使用迭代器

使用下标进行随机访问:e.g:输入一个十进制数,转换成为一个对应的十六进制数

3.3 标准库类型vector

vector
表示对象的集合,其中所有对象的类型都是一样的. 

eg
vector<int>ivec;

不存在包含引用的vector;

3.3.1
定义和初始化vector对象:

vector<T>
v1;

vector<T>
v2(v1)/v2=v1;

vector<T>
v3(n,val);

vector<T>v4{a,b,c,d,......}

vector 支持copy;

列表初始化vector对象:vector<string>
ivec{"a","an","the"};

创建制定数量的元素:

vector<int>
ivec(10,-1);vector<string>(10,"hi");

值初始化:通常情况下,可以只提供vector对象容纳的元素数量而忽略初始值。此时库会创建一个值初始化的元素初值,赋给容器中的所有元素。

对于int内置类型来讲都置为0
,string类型则默认初始化。

列表初始值还是元素数量?

圆括号是构造,不能用字符串字面值来构造vector对象。花括号是列表初始化;

当花括号中的元素不能用来列表初始化的时候,就要考虑用这种值来构造vector对象了。

3.3.2
向vector对象里面添加元素:

两种情况向vector对象里面添加元素:1.不符合初始化的条件(元素数量比较大)2.运行的时候才知道Vector里面元素的数目的时候

 注:vextor初始化的条件:1.一个vector对象是另外一个vector对象的副本。2.元素数量都是相同的3.元素数量比较少,可以列表初始化。

C++标准程序库的定义:

C++中的标准程序库(简称标准库)是类库函数的集合,其使用核心语言写成。标准程序库提供若干泛型容器、函数对象、泛型字符串和流(包含交互和文件I/O),支持部分语言特性和常用的函数,如开平方根。C++标准程序库也吸收了ISO C90 C标准程序库。标准程序库的特性声明于std命名空间之中。

标准模板程序库 (STL = Standard Template Library)是C++标准程序库的子集,包含容器、算法、迭代器、函数对象等。也有些人使用术语STL代表C++标准程序库。

vector的其他操作:

3.4
迭代器介绍:是一种类型用于访问容器中的元素以及在元素之间移动

3.4.1
使用迭代器:如果两个迭代器指向同一种元素或都是同一个容器的尾后迭代器则它们是相等的。

迭代器从一个元素移动到另外一个元素:for(auto
it=s.b      
 egin();it!=s.end()&&!isspace(*it);++it)

泛型编程:

迭代器类型:string::iterator
it2;vector<int>::iterator it;iterator 的对象可读可写。

迭代器和迭代器类型

begin和end运算符:
 返回的具体类型由对象是否是常量来决定。如果对象是常量那么返回的类型是const_iterator,如果对象不是常量那么返回的类型是iterator

c++
11中规定的两个新函数cbegin和cend
v.cend和v.cbegin都是返回指示容器的第一个和最后一个元素的迭代器。

结合解引用和成员访问操作:

某些对Vector对象的操作会是迭代器失效:

3.4.2
迭代器运算:

chapter 3 字符串,向量和数组,码迷,mamicode.com

时间: 2024-10-14 08:56:47

chapter 3 字符串,向量和数组的相关文章

&lt;&lt;C++ Primer&gt;&gt; 第三章 字符串, 向量和数组 术语表

术语表 第 3 章 字符串, 向量和数组 begin: 是 string 和 vector 的成员,返回指向第一个元素的迭代器.也是一个标准库函数,输入一个数字,返回指向该数字首元素的指针. ?? 缓冲区溢出(buffer overflow): 一种严重的程序故障,主要的原因是试图通过一个越界的索引访问容器内容,容器类型包括 string,vector 和 数组等. ?? C 风格字符串(C-style string): 以空字符结束的字符数组.字符串字面值是 C 风格字符串,C风格字符串容易出

第三章字符串.向量和数组

练习3.24:请使用迭代器重做3.3.3节的最后一个练习(读入一组整数并把他们存入一个vector对象,先输出第一个和最后一个元素的和,接着输出第二个和倒数第二个元素的和,以此类推) #include<iostream> #include<vector> using namespace std; int main() { int a; vector<int> v; while(cin>>a) v.push_back(a); auto head = v.beg

《C++primer》v5 第3章 字符串、向量和数组 读书笔记 习题答案

3.1略 3.2 string str; //读行 while(getline(cin,str)) cout<<str<<endl; //读单个词 while(cin>>str) cout<<str<<endl; 3.3 输入运算符读到空白符结束 getline读到换行符结束,并丢弃换行符 3.4 比较大小. 比较大小是比较的第一个不相同的字符的大小. int main() { string a,b; cin>>a>>b;

C++ Primer学习总结 第3章 字符串,向量和数组

第3章 字符串,向量和数组 1.    如何用string读取一整行内容? 用getline(cin,s)即可. 当然getline()也可以用来作为while循环读取输入的判断条件. 2.    string与字符串字面值,字符字面值相加 由于+法是从左向右运算的,所以只要保证每次两个值相加时,+号左右两边至少有一个是string就行. 3.    string不仅可以与字符串字面值相加,还可以与以'\0'字符结束的字符串数组相加. 4.    注意下面数组的初值: 如果a与b数组都是全局的话

C++primer笔记2:变量和基本类型、字符串,向量和数组、表达式、类

第2章:变量和基本类型 char 8位 bool 未定义 short 短整型16 int 整型16 long 长整型32 long long 长整型64 C++11新定义的 float: 1个字 32位 6位有效位 double: 2个字 64位 10位有效位 long double: 10位有效位 带符号和不带符号的 unsigned 不带符号 仅仅表示大于0的 signed 带符号 大于,小于,0 基本字符集 :比特位 可寻址的最小内存块:字节 8比特 存储的基本单位 :字 32或64比特

Chapter 4. 字符串 KMP算法

Chapter 4. 字符串 KMP算法 Sylvia's I. 讲的比较好的博客1,博客2 表问窝,在窝翻遍全网的博客后,窝已经处于混乱状态-- Sylvia's II. 窝是贴代码的小能手-- //前方高能请注意//窝并不知道窝在说什么--#include<cstdio> #include<iostream> #include<algorithm> #include<cmath> #include<cstring> using namespa

js字符串、数组、时间、日期对象

js对字符串.数组.日期的操作是在以后项目中频繁使用的操作,所以呢....所以大家看着办,其实并不难哈,就是有点无聊,我承认这是我百度的,哈哈哈哈 <!DOCTYPE html><html><head><meta charset="UTF-8"><title>JavaScript字符串对象</title></head><body><script type="text/java

golang 数据一 &nbsp; (字符串、数组和数组指针)

从如下几个方面介绍GO语言的数据 1. 字符串 2. 数组 3. 切片 4. 字典 5. 结构 字符串 Go语言中的字符串是由一组不可变的字节(byte)序列组成从源码文件中看出其本身是一个复合结构 string.go  type stringStruct struct {     str unsafe.Pointer         len int } 字符串中的每个字节都是以UTF-8编码存储的Unicode字符字符串的头部指针指向字节数组的开始但是没有NULL或'\0'结尾标志. 表示方式

字符串,字典,数组写入本地文件和从本地文件读取

参考:http://blog.csdn.net/hakusan/article/details/39429393?utm_source=tuicool&utm_medium=referral 一.字符串,字典,数组存储到本地文件 字符串,数组,字典存储到本地文件过程一样,只是要存储的数据类型不同而已,这里以字符串存储到本地文件为例,如下:    NSString *content = @"将字符串存储到本地文件";    (1)获取Documents文件夹路径 参数:(1)指定