C++ Primer 学习笔记 第三章 字符串、向量和数组

//3.1命名空间的using声明
//每个名字都需要独立的using声明
//头文件不应包含using声明


//3.2标准库类型string
//标准库了卫星string表示可变长的字符序列,使用string类型必须首先包含string头文件

//3.2.1定义和初始化string对象

#include "iostream"
#include "string"
using namespace std;
string s1;
string s2 = s1;
string s3 = "hiya";
string s4(10, 'c');

//string对象上的操作
int main31() {
	string os,ob;

	cin >> os>>ob;

	cout << os<<ob;

	system("pause");
	return 0;
}

//读取未知数量的string对象

int main32() {
	string word;
	while (cin >> word)
		cout << word << endl;
	system("pause");
	return 0;
}

//使用getline读取一整行
int main33() {
	string word;
	while (getline(cin,word))
		cout << word << endl;
	system("pause");
	return 0;
}

//string的empty和size操作
//empty函数根据string对象是否为空返回一个对应的布尔值
//size返回的string的长度,返回值是size_type类型(无符号整型)

//比较string对象
/*
==和!=运算符
< <= > >=
1.如果两个string对象的长度不同,而且较短string对象的每个字符都与较长string对下给你对应位置上的字符相同,
就说较短string对象小于较长string对象
2.如果两个string对象再某些对应的位置上不一致,则string对象比较的结果其实是string对象中第一个相异字符比较的结果。
*/

//为string对象赋值
//string st1(10, 'c'), st2;
//st1 = st2;


//两个string对象相加

//字面值和string对象相加
//允许字符字面值和字符串字面值自动转换为string对象
//因为某些历史原因,也为了与C兼容,所以C++语言中的字符串字面值并不是标准库类型string对象。
//切记,字符串字面值与string是不同的类型。


//3.2.3处理string对象中的字符
//处理每一个字符?使用基于范围的for语句
//for (declaration:expression)
//{
//	stament;
//}

//使用范围for语句和ispunct函数统计string对象中标点符号的个数

int main34() {
	string str1 = "adsjf lk kjajlfkj ?fdsakfj,,,";
	int sum = 0;
	for (auto &s:str1)
	{
		if (ispunct(s))
		{
			sum++;
		}
		s = toupper(s);
	}
	cout << sum << endl;
	cout << str1 << endl;
	system("pause");
	return 0;
}

//只处理一部分字符
//下标和迭代器
//[]和iteractor


//3.3标准库类型vector
//模板本身不是类或函数,相反可以将模板看作编译器生成类或函数编写的一份说明。
//编译器根据模板创建类或函数的过程称为实例化,当时用模板时,需要指出编译器应把
//类或函数实例化成何种类型。
//引用不是对象,因此不存在包含应用的vector


//3.3.1定义和初始化vector对象
//如果用的是圆括号,可以说提供的值是用来构造vector对象的
//如:vector<int> v1(10) 初始值说明了vector对象的容量。
//如果使用的是花括号,可以表述成我们想列表初始化该对象。
//如 vector<int> v1{1,2};


//3.3.2向vector中添加元素
//push_back();


//3.3.3其他vector操作
//除了push_back以外,vector还提供了几种其他操作,大多数都和string的相关操作相似。
//计算vector内对象的索引
//不能用下标形式添加元素。


//3.4迭代器介绍
//所用容器都支持迭代器,只有少数或几种才同时支持下标运算
//有效的迭代器或者指向某个元素,或者指向容器中尾元素的下一位置;其他所有情况都属于无效

//3.4.1使用迭代器
//和指针不一样的是,获取迭代器不是使用取指符号,有迭代器的类型同时拥有返回迭代器的成员
//比如,这些类型都拥有名为begin和end的成员,其中begin成员负责返回指向第一个元素的迭代器
//end成员负责返回指向容器“尾元素的下一位置”的迭代器,也就是说,该迭代器知识的是容器的一个本不存在的“尾后”元素。
//这样的迭代器没什么实际含义,仅是个标记而已,表示我们已经处理完了容器中的所有元素。end成员返回的迭代器被称作尾后迭代器
//如果容器为空则bengin和end返回的是同一个迭代器。

//迭代器运算符
//迭代器从一个元素移动到另一个元素
//迭代器类型


//3.4.2迭代器运算
//支持加减算术运算

//3.5数组
//数组也是存放类型相同的对象的容器,这些对象本身没有名字,需要通过其所在位置访问。
//与vector不同的是,数组得大小确定不变。

//3.5.1定义和初始化内置数组
//不允许使用一个数组初始化另一个数组,不能把一个数组直接赋值给另一个数组

//3.5.2访问数组得元素

//3.5.3指针和数组
//默认数组名为数组第一个元素的地址
//指针也是迭代器
//指针运算
//下标和指针

//3.5.4C风格的字符串
//const char cal[]=“dlskafj”;
//尽管C++支持c风格字符串,但在C++程序中最好还是不要使用它们,这是因为C风格字符串不仅是用起来不太方便
//而且容易引发程序漏洞

//c标准库的string函数
//strlen(p)返回p的长度,空字符不计算在内
//strcmp(p1,p2)比较p1和p2的相等特性
//strcat(p1,p2)将p2附加p1之后,返回p1
//strcpy(p1,p2) 将p2拷贝给p1,返回p1

//3.5.5与旧代码的接口
//混用string对象和C凤凤字符串
//使用数组初始化vector可行


//3.6多维数组
//本质是数组的数组,当一个数组的元素同样是数组时,通常使用两个维度来定义他

//多维数组的初始化   
//int ia[3][4] = {
//	{0,1,2,3},
//	{4,5,6,7},
//	{8,9,10,11}
//};


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值