C++新手关于标准库学习笔记
2012-03-31 00:35
363 查看
c++中定义了一个内容丰富的抽象数据类型标准库,其中最重要的是string和vector,他们分别定义了大小可变的字符串和集合。下面分别详细讲解两者还有bitset的一些基本用法。(新手记录的东西都很琐碎,没办法)
标准库string类型
读写:标准输入读取string类型(cin>>s;)忽略开头所有空白字符,读取字符再遇到空白字符读取终止, 返回所读的数据流。
getline(cin,line)读取整行文本不忽略开头空白字符(包括换行符),换行符终止读入,返回输入流,但是同时丢弃所有换行符,即换行符 不会存储在string对象中。
常用string对象操作:
s.empty() //空串返回true,否则false(即返回bool值)
s.size() //返回s字符个数(字符个数为0,s.size()==0等价于s.empty()为true)
s
; //字符数组
s1+s2; //对象相加
s1=s2; // 赋值
v1==v2;
!=,<,<=,>,>= //比较
string::size_type类型:
size操作返回的是string::size_type类型的值,个人认为它与int只是存储范围大小的区别,是int的两倍。
特别注意的是,任何存储string的size操作结果的变量必须为string::size_type类型,不能将size返回值付给一个int变量。
和字符串字面值连接:
string s1="hello";
对象+字面值(+字面值):
string s2=s1+"world";(或者s2=s1+"world"+"!";)
将两个字符串字面值相加是非法!!
string s3="hello"+"world";//error
string s4="hello"+"world"+s2;//error
从string对象获取字符:
下标获取:for(string::size_type
ix=0; ix!=s.size(); ix++)
tolower(c)
//如果c是大写字母则返回小写字母形式,否则直接返回c
toupper(c)
//如果c是小写字母则返回大写字母形式,否则直接返回c
标准库vector类型:
vector是同一种类型的对象的集合,vector不是一种数据类型,是一个类模板。
定义方式:(vector<变量类型>
变量)vector<int> ivec ;
vector<string> ivec ;
vector<int>和vector<string>都是数据类型。
初始化:vector<int> fvec(10);//10个元素,每个都置
vector对象的操作:
v.empty() ;
v.size() ; //返回v中元素个数
v.push_back(c) ; //在v的末尾增加一个值为c的元素
v
; v1=v2;v1==v2; !=,<,<=,>,>=
特别注意的是,和string使用size_type类型类似,不能将size返回值付给一个int变量,vector类型总是包括vector的元素类型。
vector<int>::size_type //ok
vector::size_type //error
数组是不能扩展大小的,而vector对象可以动态增长,这种动态添加元素的方法是数组不能比拟的
添加元素:
vector<string> text ;
text.push_back(word) ;//添加元素word到text
注意,vector下标操作只能读取、修改已存在的元素,不能向空的对象中添加元素。
for(vector<int>::size_type ix=0 ; ix!=ivec.size() ; ix++)
ivec[ix]=0 ; //将全部元素变为0
vector<int> ivec ; //empty vector
for(vector<int>::size_type ix=0 ; ix!=ivec.size() ; ix++)
ivec[ix]=ix ;//用下标方式向vector中添加元素这是办不到的!!
除了下标访问vector对象的元素外,还可以用迭代器访问。迭代器(iterator)是一种检查容器内元素并遍历元素的数据类型。
每一种容器都定义了自己的iterator类型:如vector:
vector<int>::iterator iter ;//iter是变量
每一种容器都定义了一对begin和end函数。begin指向容器vector第一个元素,而end指向最后一个元素的下一个元素,即指向一个不存在的元素,作用在于作为遍历容器的哨兵。
For(vector<int>::iterator iter=ivec.begin();iter!=ivec.end();iter++)
*iter=0;//用解引用操作符*来访问迭代器的元素
标准库bitset类型
bitset也是类模板,是二进制位集的处理。
string对象和bitset对象之间是反向转化的,string下标是从0--->size;bitset下标是从size-->0。
string
s1("1100");//string对象直接表示位模式
bitset<32> bitvec(s1);// bitset模式中下标2、3位为1,下标0、1位为0.
bitset对象的操作:
b.size();
//b中二进制位的个数
b.count();
//b中置为1的二进制位的个数
b.set();
// b中所有二进制位都置为1
b.reset();//b中所有二进制位都置为0
标准库string类型
读写:标准输入读取string类型(cin>>s;)忽略开头所有空白字符,读取字符再遇到空白字符读取终止, 返回所读的数据流。
getline(cin,line)读取整行文本不忽略开头空白字符(包括换行符),换行符终止读入,返回输入流,但是同时丢弃所有换行符,即换行符 不会存储在string对象中。
常用string对象操作:
s.empty() //空串返回true,否则false(即返回bool值)
s.size() //返回s字符个数(字符个数为0,s.size()==0等价于s.empty()为true)
s
; //字符数组
s1+s2; //对象相加
s1=s2; // 赋值
v1==v2;
!=,<,<=,>,>= //比较
string::size_type类型:
size操作返回的是string::size_type类型的值,个人认为它与int只是存储范围大小的区别,是int的两倍。
特别注意的是,任何存储string的size操作结果的变量必须为string::size_type类型,不能将size返回值付给一个int变量。
和字符串字面值连接:
string s1="hello";
对象+字面值(+字面值):
string s2=s1+"world";(或者s2=s1+"world"+"!";)
将两个字符串字面值相加是非法!!
string s3="hello"+"world";//error
string s4="hello"+"world"+s2;//error
从string对象获取字符:
下标获取:for(string::size_type
ix=0; ix!=s.size(); ix++)
tolower(c)
//如果c是大写字母则返回小写字母形式,否则直接返回c
toupper(c)
//如果c是小写字母则返回大写字母形式,否则直接返回c
标准库vector类型:
vector是同一种类型的对象的集合,vector不是一种数据类型,是一个类模板。
定义方式:(vector<变量类型>
变量)vector<int> ivec ;
vector<string> ivec ;
vector<int>和vector<string>都是数据类型。
初始化:vector<int> fvec(10);//10个元素,每个都置
vector对象的操作:
v.empty() ;
v.size() ; //返回v中元素个数
v.push_back(c) ; //在v的末尾增加一个值为c的元素
v
; v1=v2;v1==v2; !=,<,<=,>,>=
特别注意的是,和string使用size_type类型类似,不能将size返回值付给一个int变量,vector类型总是包括vector的元素类型。
vector<int>::size_type //ok
vector::size_type //error
数组是不能扩展大小的,而vector对象可以动态增长,这种动态添加元素的方法是数组不能比拟的
添加元素:
vector<string> text ;
text.push_back(word) ;//添加元素word到text
注意,vector下标操作只能读取、修改已存在的元素,不能向空的对象中添加元素。
for(vector<int>::size_type ix=0 ; ix!=ivec.size() ; ix++)
ivec[ix]=0 ; //将全部元素变为0
vector<int> ivec ; //empty vector
for(vector<int>::size_type ix=0 ; ix!=ivec.size() ; ix++)
ivec[ix]=ix ;//用下标方式向vector中添加元素这是办不到的!!
除了下标访问vector对象的元素外,还可以用迭代器访问。迭代器(iterator)是一种检查容器内元素并遍历元素的数据类型。
每一种容器都定义了自己的iterator类型:如vector:
vector<int>::iterator iter ;//iter是变量
每一种容器都定义了一对begin和end函数。begin指向容器vector第一个元素,而end指向最后一个元素的下一个元素,即指向一个不存在的元素,作用在于作为遍历容器的哨兵。
For(vector<int>::iterator iter=ivec.begin();iter!=ivec.end();iter++)
*iter=0;//用解引用操作符*来访问迭代器的元素
标准库bitset类型
bitset也是类模板,是二进制位集的处理。
string对象和bitset对象之间是反向转化的,string下标是从0--->size;bitset下标是从size-->0。
string
s1("1100");//string对象直接表示位模式
bitset<32> bitvec(s1);// bitset模式中下标2、3位为1,下标0、1位为0.
bitset对象的操作:
b.size();
//b中二进制位的个数
b.count();
//b中置为1的二进制位的个数
b.set();
// b中所有二进制位都置为1
b.reset();//b中所有二进制位都置为0
相关文章推荐
- 关于git的命令行使用,新手学习笔记(新手入门级)
- C++学习笔记(二)(标准库string类型)
- 新手学习C++笔记1:调试错误之找不到标识符
- c++新手学习笔记--类-构造函数
- C++学习笔记(六):关于ifdef 和ifndef的使用
- c++学习笔记(8)——关于模板类
- C++基础的不能再基础的学习笔记——标准库类型vector(基础)
- C++学习笔记(三)——标准库类型
- C++学习笔记(五)----关于参数传递(2)
- [C++ Primer Plus]学习笔记--关于C++ string和c类型字符数组的对比
- c++关于带指针类的学习笔记(第二周)
- C++ Primer 学习笔记关于练习题6.12
- 新手学习C++笔记8:指针与引用
- 关于静态绑定与动态绑定的辨别笔记----C++学习之路
- [学习笔记]C和C++中关于字符串的细小知识点
- C++ 学习笔记 1.0 : 基本语言(变量和基本类型,标准库类型,表达式,语句,函数,标准IO库)
- C++学习笔记(三)----关于at()和下标符[]
- 【C++】【学习笔记】【未成功实现】关于指针的函数【very difficult】
- C/C++学习笔记33:C++中标准库string类型
- c++ 学习笔记 -- 关于cout的一些小细节