c++ primer基础篇--3

                                            第三章

抽象数据类型:  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;
}






















  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值