//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}
//};
C++ Primer 学习笔记 第三章 字符串、向量和数组
最新推荐文章于 2022-11-24 22:57:33 发布
本文介绍了C++标准库中的string类型,包括定义、初始化和常见操作,如读取、比较和赋值。此外,还讲解了vector对象的创建、元素添加和其他操作。同时,详细阐述了迭代器的概念、使用和运算,以及数组的基本操作,如定义、初始化和访问元素。最后提到了多维数组和C风格字符串的特点和注意事项。
摘要由CSDN通过智能技术生成