C++编程学习笔记——基础篇(二)标准库类型

一. 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;

三.迭代器




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值