C++Primer学习笔记第三章(3/18) 标准库类型

标准库类型:

标准库类型是C++自定义的抽象数据类型标准库。如string, vector, bitset等。

 

命名空间的using声明:

using namespace::name

 

 

标准库stringe类型的使用:

#include <string>

using std::string;

 

标准库string对象的定义和初始化:

string s1; 或者

string s2(s1); 或者

string s3(“value”); 或者

string s4(n,’c’)

注意,字符串字面值类型与标准库string类型不是一个类型。因此,尽管有string s3(“value”),仅表示讲string类型的s3初始化为value字符串字面值的副本。

 

标准库string对象的读写:

1读取忽略开头所有的空白字符(空格,换行符,制表符)

2读取字符直到再次遇到空白字符。

以上规则的应用如下,读入未知数目的string类对象,放入读入语句while循环的条件判断中。

int main()

{

string word;

while(cin>>word);//

cout<<word<<endl;

return 0;

}

用输入操作符cin来读取string对象,该操作符返回所读的istream对象。在读取结束后,作为while的判断条件,如果输入流失有效的,即还未到达文件尾且遇到无效输入,则执行while循环体,并将读取到的字符串输出到标准输出。如果到了文件尾,则跳出循环。

 

使用getline读取整行文本:

这个函数接受两个参数:一个输入流对象和一个 string 对象。getline 函数从输入流的下一行读取,并保存读取的内容到string中,但不包括换行符。和输入操作符不一样的是,getline 并不忽略行开头的换行符。只要 getline 遇到换行符,即便它是输入的第一个字符,getline 也将停止读入并返回。如果第一个字符就是换行符,则 string 参数将被置为空 string

int main()

     {

         string line;

         // read line at time until end-of-file

         while (getline(cin, line))

             cout << line << endl;

         return 0;

     }

 

 

string::size_type类型

string类类型和许多其他哭类型都定义了一些配套类型,它们使得库类型的使用和机器无关。size_typeunsigned int或者unsigned long有差不多的含义。注意不要把size_type类型赋值给int,否则会越界。

 

string和字符串字面值的连接:

string和字符串字面值连接时,+操作符的左右操作数必须至少有一个是string类型。

因此,string s=s1+”,”+”world”是合法操作。因为string标准库定义家操作返回一个sttrign对象,第一个”+”操作符将返回一个string对象,它将和后面的字面值”world”连接。

 

string的下标操作符[]:

可以使用string的下标操作符[]来访问string对象中的单个字符。string的下标操作符可以放在赋值操作符的左边或者右边。注意下标的索引范围不要越界,并且最好用size_type类型来定义。

 

标准库vector类型:

vector本质上是一个类模板,是一个可以放入各种类型的容器。

vector<int> ivec;

vector<string> svec;

 

vector的定义和初始化:

vector<T> v1;或者

vector<T> v2(v1);或者

vector<T> v1(n,i);或者

vector<T> v1(n);或者

 

vector的重要特性1

可以动态添加元素。因此可以先初始化一个空的vector对象,再按需添加元素。

 

vector的下标操作:

类似string中的下标操作。

for(vector<int>::size_type ix=0;ix!=ivect.size();++ix)

ivec[ix]=0;

下标操作只能用来获取元素,不能用来添加元素。

 

 

标准库iterator类型:

实际上,每种容器类型都定义了自己的迭代器iterator类型,用来检查容器类元素并遍历元素。

 

迭代器begin()end()操作

vector<int>::iterator iter1=ivec.begin();//指向容器第一个元素

vector<int>::iterator iter2=ivec.end();//指向容器的末端元素的下一个元素。

ivec.begin()==ivec.end(),则说明容器为空。

 

迭代器的解引用:

*iter1=0; //*iter可以用来访问和赋值

 

const_iterator:

只能用于读取容器中的元素,不能改变其值。

const类型的iterator是两回事。const类型的iterator没法做遍历,只能指向一个元素,可以改变这个元素的值。

 

迭代器的算术操作:

iterator+n, iterator-n//加上或者减去的值的类型是vectorsize_type或者difference_type类型。

 

通过迭代器来遍历:

for (vector<int>::iterator iter = ivec.begin();iter != ivec.end(); ++iter)

         *iter = 0;

如果 vector 为空,程序是安全的。如果 ivec 为空,则 begin 返回的迭代器不指向任何元素——由于没有元素,所以它不能指向任何元素。在这种情况下,从 begin 操作返回的迭代器与从 end 操作返回的迭代器的值相同,因此 for 语句中的测试条件立即失败。

 

 

标准库的bitset类型     

bitset<32> bitvec//

bitset也是一种类模板,这点和vector类似。但是bitset是一个位集(每个位可能为10),因此在只需在尖括号内明确给出它有多少位。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值