第三章
抽象数据类型: string 、vector、 bitset
string:
----构造函数----
string str_temp0;
string str_temp1("ddddddd");
string str_temp2(str_temp1);
string str_temp3(5, 'q');
cin>>str_temp0; // hello world 忽略开始的空格, 遇到空格停止 --输出:hello
cout<<str_temp0<<"\t"<<str_temp1<<endl;
cout<<str_temp2<<"\t"<<str_temp3<<endl;
----常用操作----
getline : 原型getline(cin, str_temp0);//输入的内容忽略最后的换行符 , 但不忽略换行符, 遇到换行符则停止
str.empty() //判断为空
str.size() //获取大小
str[n] //返回位置是n个字符
str1 + str2 //连接字符串 , 注意左右值至少有一个是string的对象
str1 = str2 //str1 替换为 str2
str1 == str2//判断大小
>= 、<=、 <、>、!= //支持此操作
支持string的常用操作--判断字符、改变大小等isalnum()、 islower()、。。。。
注:基于string操作的无符号类型是 string::size_type
#include <string>
#include <iostream>
using std::string;
using std::cout;
using std::endl;
using std::cin;
using std::getline;
int main()
{
string str_temp0;
string str_temp1("ddddddd");
string str_temp2(str_temp1);
string str_temp3(5, 'q');
cin>>str_temp0; // hello world 忽略开始的空格, 遇到空格停止 --输出:hello
cout<<str_temp0<<"\t"<<str_temp1<<endl;
cout<<str_temp2<<"\t"<<str_temp3<<endl;
std::cin.clear();
std::cin.sync();
if(!str_temp1.empty())
cout<<"no empty!!"<<endl;
string::size_type size = 0;
size = str_temp1.size();
cout<<"size = "<<size<<endl;
if(str_temp0 == str_temp1)
cout<<"equal"<<endl;
str_temp0 = str_temp0+"fdahfd";
cout<<"++++"<<str_temp0<<endl;
str_temp0="fdahfd";
cout<<"++++"<<str_temp0<<endl;
for(string::size_type index = 0; index != str_temp0.size(); ++index)
str_temp0[index] = toupper(str_temp0[index]);
cout<<str_temp0<<endl;
while(getline(cin, str_temp0)) //输入的内容忽略最后的换行符 , 但不忽略换行符, 遇到换行符则停止
cout<<str_temp0<<endl;
return 0;
}
vector: 类似string
同一类型的对象的集合
----构造函数----
vector<int> ivec1;
vector<int> ivec2(ivec1);
vector<int> ivec3(5, 1);
vector<int> ivec4(3);
string word;
vector<string> text;
while(cin >> word)
text.push_back(word);
----常用操作----
ivec1.empty() //判断为空
ivec1.size() //获取大小
ivec1.push_back(t); //在ivec1的末尾增加一个t元素
ivec1[n] //返回位置是n个字符
ivec2=ivec1 //str1 替换为 str2
ivec2==ivec1//判断大小
>= 、<=、 <、>、!= //支持此操作
注:基于string操作的无符号类型是 vector<int>::size_type附:
#include <vector>
#include <string>
#include <iostream>
using std::string;
using std::vector;
using std::vector<int>;
using std::cout;
using std::cin;
using std::endl;
int main()
{
vector<int> ivec1; //空的vector
vector<int> ivec2(ivec1); //同类型的赋值
vector<int> ivec3(5, 1); //5 初始值为1
vector<int> ivec4(3); //3的元素,但初始值是0
vector<int> u32Type; //定义空的vector
for(vector<int>::size_type ix=0; ix!=10; ix++)
u32Type.push_back(ix); //追加元素
cout<<"u32Type[0]"<<u32Type[0]<<u32Type[8]<<endl;
for(ix=0; ix!=10; ix++)
u32Type[ix] = 0; //清空元素
cout<<"u32Type[0]"<<u32Type[0]<<u32Type[8]<<endl;
string word; //字符串类似 ---ctrl+z
vector<string> text;
while(cin >> word)
text.push_back(word);
cout<<"0."<<text[0]<<endl;
cout<<"1."<<text[1]<<endl;
return 0;
}
以上操作是基于下标的,但更多的C++使用迭代器来操作容器。
vector <int> ivec(5);
vector<int>::iteraor iter; //定义一个名为iter的变量, 它的的数据类型是vector定义的iterator的类型
iter = ivec.begin(); //指向第一个
iter = ivec.end(); //指向最后一个的下一个
ivec[0] = *iter; //获取第一个 数据
iter-n; iter+n ; //指向偏移+-n的数据
vector<int>::const_iteraor constIter; //其指向的数据不能改变
const vect<int>::iteraor iteTemp ; //其容器不能改变,但容器的内容可以改变
具体使用见代码:
#include <vector>
#include <string>
#include <iostream>
using std::string;
using std::vector;
using std::vector<int>;
using std::cout;
using std::cin;
using std::endl;
int main()
{
vector<int> ivec(5); //5的int的容器
vector<int>::iterator iteStr, iteEnd;
for(vector<int>::size_type ix=0; ix!=5; ix++)
ivec[ix] = ix;
iteStr = ivec.begin(); //指向第一个元素
iteEnd = ivec.end(); //指向最后一个元素的下一个元素
for(vector<int>::iterator ite=ivec.begin(); ite!=ivec.end(); ite++)
cout<<"num: "<<*ite<<endl;
cout<<"size "<<iteEnd - iteStr<<endl;
cout<<"the three value is "<<*(iteEnd - 2)<<endl;
cout<<"the three value is "<<*(iteStr + 3)<<endl;
cout<<"start - end"<<"\t"<<*iteStr<<"-"<<*--iteEnd<<endl;
/*******const_iterator,表示其指向的对象是不可改变的**********************/
for(vector<int>::const_iterator constIte=ivec.begin(); constIte!=ivec.end(); constIte++)
// *constIte = 0; //error *constIte is const;
cout<<"num: "<<*constIte<<endl; //const_iterator,表示其指向的对象是不可改变的
/*******const iterator,表示其迭代器是不可改变的,指向的值是可以改变的**********************/
const vector<int>::iterator iteTemp = ivec.begin();
// iteTemp++; //error ivec is const;
*iteTemp = 10; //指向的值可以改变
cout<<"the first is "<<ivec[0]<<endl;
return 0;
}