范围for

对于一个有范围的集合而言,由程序员来说明循环的范围是多余的,有时候还会容易犯错误。因此C++11中引入了基于范围的for循环。for循环后的括号由冒号“ :”分为两部分:第一部分是范围内用于迭代的变量,第二部分则表示被迭代的范围,自动迭代,自动取数据,自动判断结束。
范围for可以作用到数组和容器对象上进行遍历
范围for的底层很简单,容器遍历实际就是替换为迭代器,这个从汇编层也可以看到。

#include
#include 
#include 
using namespace std;
int main()
{
	int array[] = { 1, 2, 3, 4, 5 };
	// C++98的遍历
	for (int i = 0; i < sizeof(array) / sizeof(array[0]); ++i)
	{
		array[i] *= 2;
	}
	for (int i = 0; i < sizeof(array) / sizeof(array[0]); ++i)
	{
		cout << array[i] << endl;
	}
	// C++11的遍历
	for (auto& e : array)
	e *= 2;
	for (auto e : array)
	cout << e << " " << endl;
	string str("hello world");
	for (auto ch : str)
	{
		cout << ch << " ";
	}
	cout << endl;
	return 0;
}
 class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
class="hide-preCode-box">

二、string类

为什么学习string类?
C语言中的字符串
C语言中,字符串是以’\0’结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列的库函数,但是这些库函数与字符串是分离开的,不太符合OOP的思想,而且底层空间需要用户自己管理,稍不留神可能还会越界访问。
在OJ中,有关字符串的题目基本以string类的形式出现,而且在常规工作中,为了简单、方便、
快捷,基本都使用string类,很少有人去使用C库中的字符串操作函数。

2.1 string类(了解)

string类的文档介绍:链接
在使用string类时,必须包含#include头文件以及using namespace std;

2.2 string类的常用接口说明

2.2.1 string类对象的常见构造

(constructor) 链接————函数名称功能说明
string() ————————-构造空的string类对象,即空字符串
string(const char* s)——— 用C-string来构造string类对象
string(size_t n, char c) ——string类对象中包含n个字符c
string(const string&s)——–拷贝构造函数

void Teststring()
{
	string s1; // 构造空的string类对象s1
	string s2("hello bit"); // 用C格式字符串构造string类对象s2
	string s3(s2); // 拷贝构造s3
}
 class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">

2.2.2 string类对象的容量操作

size链接————返回字符串有效字符长度
length 链接———返回字符串有效字符长度
capacity链接 ——返回空间总大小
empty 连接 ——–检测字符串释放为空串,是返回true,否则返回false
clear 链接———–清空有效字符
reserve链接——–为字符串预留空间**
resize连接———-将有效字符的个数该成n个,多出的空间用字符c填充

上面的接口都生成了链接,可以在这里看到string类的相关接口函数的讲解

  1. size()与length()方法底层实现原理完全相同,引入size()的原因是为了与其他容器的接口保持一致,一般情况下基本都是用size()。
  2. clear()只是将string中有效字符清空,不改变底层空间大小。
  3. resize(size_t n) 与 resize(size_t n, char c)都是将字符串中有效字符个数改变到n个,不同的是当字符个数增多时:resize(n)用0来填充多出的元素空间,resize(size_t n, charc)用字符c来填充多出的元素空间。注意:resize在改变元素个数时,如果是将元素个数增多,可能会改变底层容量的大小,如果是将元素个数减少,底层空间总大小不变。
  4. reserve(size_t res_arg=0):为string预留空间,不改变有效元素个数,当reserve的参数小于string的底层空间总大小时,reserver不会改变容量大小。

上面这些有关容量的操作和使用方式在链接都会提到
另外就是这些有关容量的其实和我们再数据结构学的一些接口差不多,大家可以点链接看看

总结

本篇主要是学习了aotu关键字和范围for的使用有了这个两个东西,在后面我们学习stl的过程舒服一些
还有就是string类的容量有关接口今天的接口其实相对来说都很简单,因为以前都接触过。
下一篇博客将会深入了解string类的一些其他的接口,会有点难

今天的内容我们就到这里啦,不要走开,小编持续更新中~~~

在这里插入图片描述

data-report-view="{"mod":"1585297308_001","spm":"1001.2101.3001.6548","dest":"https://blog.csdn.net/daily_233/article/details/145166198","extend1":"pc","ab":"new"}">>
注:本文转载自blog.csdn.net的daily_2333的文章"https://blog.csdn.net/daily_233/article/details/145166198"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接

评论记录:

未查询到任何数据!