一. string类型
1.string类型,首先要包含头文件#include<string>,才能使用string类型,string类型使用构造函数来初始化,默认构造函数为空串,有以下几种初始化方式:
string s1 ; 默认s1空串
string s2(s1); 将s1赋值给s2
string s3("value"); 将字符串赋值
string s4( n, 'c'); 将c 的n 个副本赋值给s4
2.string 类型的读入,需要注意两点: 读取忽略开头所有的空白字符(空格,换行符,制表符);读取字符直至再次遇到空白字符就终止,而且不会保存最后的空白字符(也就是说你输入“ hello world ”,字符s收到的是hello)。
3.getline读取整行文本,即可以读取空格字符。C++中本质上有两种getline函数,一种在头文件<istream>中,是istream类的成员函数。一种在头文件<string>中,是普通函数。
istream的重载形式代码如下:是以字符数组为读取对象,大小有限制,
char s1[10]; while(cin.getline( s1 , 10 ) ) cout<<s1<<endl;string中的getline形式则如下:
string s; while( getline( cin , s ) ) cout<<s<<endl;运行结果:
4.string的string::size_type类型,当你定义一个string字符串,调用str.size()的时候,很显然会返回字符串中字符的个数,但是这个数字的类型你并不知道,他是int 还是unsigned ? 重要的是int和unsigned之间不能直接赋值,所以这时候你需要用string::size_type类型,比如:
string str("hello world"); for(string::size_type i = 0 ; i < str.size(); i++) cout<<str[i];5.一些重要的string对象操作符:<,<=,>,>= ;(按照字典排序比较),两个string对象相加就是被定义为连接字符,而与字符串之间的连接有些许不同,就是 加号‘+’操作符的左右操作数必须至少有一个是string类型,如:
string s1= "hello" ;
string s2 = "world";
string s3 = s2 +"balabla" ; 可以,有s2
string s4 = "hello"+"fdsdfa" ; 不可以,没有string对象
string s5 = s1 + "dfd" + "dfsadfa" ; 可以 s1+"dfd"会返回一个string对象
string s6 = "sdf" + "dfs" +s1 ; 不可以
6.string对象的字符串可以通过下标访问字符串中的每个字符,下标从0开始;
7.其他一些对string对象中字符处理的函数:(定义在cctype头文件中)
isalnum(c) 如果字符是字母或数字,返回true
isalpha(c) 如果是字母,,返回true
isdigit(c) 如果是数字,返回true
isgraph(c) 如果不是空格,但可以打印,返回true
islower(c) 如果是小写字母,返回true
isupper(c) 如果是大写字母,返回true
isprint(c) 如果是可打印字符,返回true
ispunct(c) 如果是标点符号,返回true
isspace(c) 如果是空白字符,返回true
isxdigit(c) 如果是十六进制数,返回true
tolower(c) 将大写字母转为小写
toupper(c) 与上相反
8.另外,笔者是C++学习小白,笔记学习是源自《C++ primer》,所以看过这本书的大神就不要喷我了,笔者目的很单纯——就是学习交流。下面是我认为比较有用的知识:C++标准库除了自己定义的之外,还用了C的标准库,像cctype就是利用C标准库函数,这些库函数定义在C标准库的ctype.h头文件中,C标准库头文件命名形式为name.h,而C++版本则命名为cname,少了后缀.h,而在前面加了c,c的意思是这个头文件是源自C标准库的。因此,cctype与ctype.h文件的内容是一样的,知识采用了更适合的C++程序的形式。特别地,cname头文件中定义的名字都定义在命名空间std内,而.h版本中的名字却不是这样。
通常,C++程序中应采用cname这种头文件的版本,而不用name.h版本,这样,标准库中的名字与std保持一致,使用.h 版本会给程序猿带来负担,因为他们必须记得哪些是标准库名字从C继承来的,哪些是C++所特有的。
二.vector容器
1.头函数#include<vector>,vector是同一种类型的对象的集合,vector是一个类模板,并不是一种数据类型,但vector<int>是一种数据类型。
定义时尖括号中要指定定义类型,如 vector<int> vec ; vector<MyclassType> vec2 ;
2.初始化,vector<T> v1 ; vector<T> v2(v1) ; vector<T> v3( n , i ) ; 表示v3包含n个值为i的元素。
vector<T> v4(n) ;表示v4含有n个初始化值(同过默认构造函数或者构造函数初始化)的元素。vector可以动态的增加元素。
3.vector对象的操作
(1)v.empty(); 判断是否空
(2)v.size(); 获取元素个数,同样,返回值要用size_type的值,注意:这里要指出类型:vector<int>::size_type
(3)v.push_back( t ) ;在v的末尾增加一个值为 t 的元素
(4)v[ n ] 返回v中位置为n 的元素
(5)v1 = v2 赋值 ;v1 == v2 判断相等, !=,< ,<=, > ,>= 保持惯有意义
4.下标操作不能添加元素,只能获取已经存在的元素,添加元素只能用push_back(t) 操作。
示例代码:
#include<iostream> #include<string> #include<vector> using namespace std ; int main(){ vector<int> vec ; vector<string> vec2(10,"hi"); for (int i = 0; i < 10; i++) { vec.push_back(i); } for (vector<int>::size_type j = 0; j != vec.size() ; j++) //C++一般使用 != ,而不是< { cout<<vec[j]<<endl; } cout<<vec[5]<<endl; cout<<vec2[4]<<endl;
三.迭代器