C++ string

目录

模版

string

迭代器

反向迭代器

范围for

string的构造函数​编辑

(3)​编辑

(6)


国庆补课正式开始,呜呜,室友都回家了,宿舍只剩我一个人。

模版

template<class T>
T swap( const T &left,  const T &right)
{
	T temp = left;
	left = right;
	right = temp;
	return left, right;
}



int main()
{
	int a = 1, b = 2;
	double c = 3, d = 4;
	swap(a, b);
	swap(c, d);

	cout << "a=" << a << " ";
		cout << "b=" << b<<endl;

		cout << "c=" << c << " ";
		cout << "d=" << d << endl;
}

string

string是一个被封装了的模版:

 用法:可以直接相加:

 string可以直接从标准输入流中直接字符,输出到标准输出流中:

	string num3;
	cout << "请输入字符:";
	cin >> num3;
	cout << "打印字符:";
	cout << num3;

也可以直接用sting变量+字符串:

	string num3;
	cout << "请输入字符:";
	cin >> num3;
	cout << "打印字符:";
	cout << num3+"SADASFD";

 string支持两个版本的函数重载,一个事普通版本的,一个是const修饰的版本的:

 string有一个size,它可以记录你的string变量有多长:

string num2 = "ABCDE";
	for (size_t i = 0; i<num2.size(); i++)
	{
		cout << num2[i] << " " ;
	}
	cout << endl;
    string num4("hello word");
	for (size_t i = 0; i < num4.size(); i++)
	{
		cout << num4[i] << " ";
	}
	cout << endl;

另一种遍历方法:

迭代器

迭代器是一个类似于指针的东西,它在string里被typedefine了。

类似于堆里面的ptr指针:

string num1 = "safdsad";
	string num3;
	string::iterator it = num1.begin();
	while (it != num1.end())
	{
		cout << *it << " ";
		it++;
		
	}
	cout << endl;

反向迭代器

与迭代器正好相反,反向迭代器从字符串末尾开始打印:

 反向迭代器的类型是:reverse

	string num1 = "safdsad";
	string num3;
	string::reverse_iterator its = num1.rbegin();
	while (its != num1.rend())
	{
		cout << *its << " ";
		its++;
		
	}
	cout << endl;

范围for

范围for可以自动++,自动判断是否结束,其实底层是迭代器:

	
   string num1 = "safdsad";
   for (auto h1 : num1)   //auto自动识别类型,这样就不用写reverse了
	{
		cout << h1;
	}
	cout << endl;

调用函数 

void fun(string s1)
{

}

int  main()
{

		fun(num1);
}

假如要传参是应该直接传参吗,直接传参就是深拷贝,浅拷贝就类似栈那种,如果潜拷贝了栈就会被free两次,就会崩。

所以应该用引用,引用为了防止被修改需要再加一个const,但是加一个const又会出问题:

这是因为传进来的参数(数组)被const限制了,所以数组不能被修改了,但是我们的迭代器仍然有修改数组的能力,如下图:

所以我们要限制一下迭代器,让它不能修改数组,可能通过限制迭代器的begin end来实现:调用cbegin(c是const的意思),cend:

也可以直接const限制迭代器:

也可以直接使用auto自动推导类型:

void fun(const string& s1)
{
	//string::const_iterator its = s1.cbegin();
	auto its = s1.begin();
	while (its != s1.cend())
	{
		cout << *its << " ";
		its++;
	}

}
int main()
{	
string num1 = "safdsad";
		fun(num1);
return 0;
}

运行效果:

string的构造函数

(3)

(6)

(7)

 OK,不再举例。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

孙鹏宇.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值