C++ Primer 第三章 标准库类型
来源:互联网 发布:手机查看gta5角色数据 编辑:程序博客网 时间:2024/04/28 09:25
C++定义了两种最重要的标准库类型:string 和 vector,它们分别定义了大小可变的字符串和标准库。其中,string类型支持长度可变的字符串,vector可用于保存一组指定类
型的对象。
3.2 标准库string 类型
string类型支持长度可变的字符串,用户程序要使用string类型对象,必须包含相关头文件。
#include <string>
3.2.2 String对象的读写
#include <iostream>#include <string>using namespace std;int main(){string s;cin >> s;cout << s << endl;return 0;}
从标准输入读取string,并将结果存储在s中。string类型的输入操作符:
1).读取并忽略开头所有的空白字符(比如空格、换行符、制表符)
2).读取字符直至再次遇到空白字符,读取终止。
比如输入“ HELLO WORLD ”,(开头跟结尾都有空格),则屏幕上输出“HELLO”,而不含任何空格。
如果把多个读操作或者多个写操作放在一起:
string s1,s2;cin >> s1 >> s2;cout << s1 << s2 << endl;
2. 用getline读取整行文本
getline接受两个参数:一个输入流对象(比如cin)和一个string对象。保存读取内容到string中,但不包括换行符,不忽略行开头的换行符。如果第一个字符是换行符,则
string参数将置为空string。
int main(){ string line;while (getline(cin,line))cout << line << endl;return 0;}
注解:由于getline函数返回时丢弃换行符,换行符将不会存储在string中。
3.2.3 string对象的操作
1.string的size和empty操作
string对象的长度指的是string对象中字符的个数(包括空格和换行符等),可以通过size操作获取
int main(){string s("The expense of spirit\n\t");cout << s.size() << endl;return 0;}注:字符串是双引号
如果想判断string的size是否为0,可以使用empty:
int main(){ string s1("The expense of spirit\n\t");string s2;if (s2.empty())cout << "empty" << endl;cout << s1.size() << endl;return 0;}
empty()成员函数将返回bool值,如果string对象为空则返回true,继续执行;否则返回false,跳出。
2.string::size_type类型
size操作返回的是string::size_type类型的值,它定义为与unsigned型具有相同的含义,而且可以保证足够大能够存储任意string对象的长度。
注解:任何存储string的size操作结果的变量必须为string::size_type类型。特别重要的是,不要把size的返回值赋给一个int变量。
3.string关系操作符
比较两个string值的大小,实际上是比较每个string对象的字符。
大写字母位于小写字母之前,任何一个大写字母都小于任意的小写字母。
==操作符:两个string对象相等是指它们的长度相同,且含有相同的字符。
1)如果两个string对象长度不同,且短的string对象与长的string对象的前面部分相匹配,则短的string对象小于长的string对象
2)如果两个string对象的字符不同,则比较第一个不匹配的字符。
5.两个string对象相加
strign对象的加法被定义为连接。
·6.和字符串字面值的连接。
string s1("hello");strign s2("world");string s3 = s1 + "," + s2 + "\n";
当进行string对象和字符串字面值混合连接操作时,+操作符的左右操作数必须至少有一个是string类型,下面是不正确的写法:
string s = "hello" + "sdfd";
7.从string对象获取字符
string类型通过下标操作符([])来访问string对象的单个字符。下标操作符需要取一个size_type类型的值。string对象的下标从0开始。
可用下标操作符分别取出string对象的每个字符,分行输出:
#include <iostream>#include <string>using namespace std;int main(){ string str("some string");for (string::size_type ix = 0; ix != str.size(); ++ix)cout << str[ix] << endl;return 0;}
3.3 标准库vector类型
vector是同一类型的对象的集合,每个对象都有一个对应的整数索引值。一个容器中的所有对象都必须是同一种类型的。
使用vector之前,必须包含相应的头文件:#include <vector>
说明vector保存何种对象的类型,通过将类型放在类模板名称后面的尖括号中来指定类型:
vector<int> ivec;vectoe<Sales_item> Sales_vec;
定义vector对象要指定类型和一个变量的列表。上面第一个定义,类型是vector<int>,该类型是含有若干int类型对象的vector,变量名为ivec。
3.3.1 vector对象的定义和初始化
1.创建确定个数的元素
若要创建非空的vector对象,必须给出初始化元素的值,可以用元素个数和元素值对vector对象进行初始化,构造函数用元素个数决定vector对象保存的个数,元素值
指定每个元素的初始值:
vector<int> ivec4(10, -1);vector<string> svec(10, "hi!");
第一个定义:容器中一共有10个元素,每个元素都是-1;第二个定义:容器一共有10的元素,每个元素都是字符串"hi"
3.3.2 vector对象的操作
1.vector对象的size
vector<int>::size_type
2.向vector添加元素
push_back()操作接受一个元素值,并将它作为一个新的元素添加到vector对象的后面。
string word;vector<string> text;while (cin >> word) {text.push_back(word);}3.vector的下标操作
vector元素的位置从0开始
for (vector<int>::size_type ix = 0; ix != ivec.size(); ++ix)
注解;C++程序员习惯优先选用!=而不是<来编写循环判断条件。
4.下标操作不添加元素
先给出错误的写法:
for (vector<int>::size_type ix = 0; ix != 10; ++ix)ivec[ix] = ix;这里的ivec是空的vector对象,而且下标只能用于获取已存在的元素,
正确写法应该是:
for (vector<int>::size_type ix = 0; ix != 10; ++ix)ivec.push_back(ix);
3.4 迭代器简介
迭代器是一种检查容器内元素并遍历元素的数据类型,C++程序更倾向于使用迭代器而不是下标操作访问容器元素。
1.容器的iterator类型
vector<int>::iterator iter;
2.begin和end操作
如果容器中有元素的话,由begin返回的迭代器指向第一个元素:
vector<int>::iterator iter = ivec.begin();
3.vector解引用运算
使用解引用操作符(*操作符)来访问迭代器所指向的元素。
*iter = 0;
5.迭代器应用的程序示例
for (vector<int>::iterator iter = ivec.begin(); iter != ivec.end(); ++iter)*iter = 0;所有元素赋值为0.
6.const_iterator
只能读取容器内元素,但不能改变其值。
- 《C++Primer》 第三章 标准库类型
- C++primer第三章:标准库类型
- C++Primer笔记 第三章 标准库类型
- C++Primer 学习笔记 第三章(标准库类型)
- C++primer学习笔记-第三章标准库类型
- C++primer第4版第三章标准库类型
- C++ primer 第三章 标准库类型
- C++ Primer 第三章 标准库类型
- C++ Primer 第三章 标准库类型
- 《c++ primer》第三章--标准库类型
- C++ primer 第三章 标准库类型
- C++ Primer 第三章 标准库类型
- C++Primer学习笔记第三章(3/18) 标准库类型
- C++primer(第五版)第三章中标准库类型Vector、迭代器和数组
- 【重学《C++Primer第四版》】第三章、标准库类型
- C++Primer 标准库类型
- C++ Primer 第三章 标准库类型 笔记
- C++ Primer 4 第三章 标准库类型
- 指针和const限定符
- hdu 1233
- Mob ShareSDK 分享(简单基础)
- 28周胎儿做四维彩超
- python_过滤器/map()
- C++ Primer 第三章 标准库类型
- jedis+线程池实现定时启动某个事项
- JavaScript之面向对象与原型
- 用Verilog通过DDS合成正弦波信号
- ajax可以正常请求数据,,web端页面报错
- 1017. A除以B (20)卡壳
- 第五节:浏览器的基本操作
- 不是每个对不起,都能换回来一个没关系。
- Nginx:虚拟主机配置