[C++ 学习]字符串_向量和数组

本文详细介绍了C++中的字符串、向量和数组的使用,包括命名空间using声明、标准库类型string的操作、vector的定义与初始化、数组的访问以及迭代器的运用。强调了标准库在提升编程效率方面的作用,同时也提醒了程序员在使用过程中需要注意的潜在问题,如迭代器失效和数组大小的固定性。
摘要由CSDN通过智能技术生成

今天的笔记是第一部分第三章,主要讲的常见标准库和容器,对这些容器熟悉后在写算法题效率会高不少。

第三章 字符串、向量和数组

第二章介绍的内置类型是由C++语言直接定义的。这些类型,比如数字和字符,体现了大多数计算机硬件本身具备的能力。标准库定义了另外一组具有更高级性质的类型,它们尚未直接实现到计算机硬件中

3.1 命名空间using声明

using namesapce::name

头文件不应包含using声明

位于头文件的代码一般来说不应该使用using声明。这是因为头文件的内容会拷贝到所有引用它的文件中去,如果头文件里有某个using声明,那么使用了该头文件的文件就会有这个声明。对于某些程序来说,由于不经意间包含了一些名字,反而可能产生始料未及的名字冲突。

3.2 标准库类型string

标准库类型string表示可变长的字符序列

#include<string>
using std::string;

3.2.1 定义和初始化string对象

string s1;					// 默认初始化,s1是一个空串
string s2(s1);				// s2是s1的副本
string s2 = s1;				// 等价于s2(s1)
string s3("value");			// s3是字面值"value"的副本,除了字面值最后的那个空字符除外
string s3 = "value";		// 等价于s3("value")
string s4(n, 'c');			// 将s4初始化为连续n个字符c组成的串

直接初始化和拷贝初始化

如果使用等号(=)初始化一个变量,实际上执行的是拷贝初始化(copy initialization),编译器把等号右侧的初始值拷贝到新创建的对象中去。与之相反,如果不使用等号,则执行的是直接初始化(direct initialization)。

当初始值只有一个时,使用直接初始化或拷贝初始化都行。如果初始化的值有多个,一般来说只能使用直接初始化的方式。

string s7(10, 'c');			// 直接初始化

3.2.2 string对象上的操作

os << s						// 将s写到输出流os中,返回os
is >> s						// 从is中读取字符串赋给s,字符串以空白分隔,返回is
getline(is, s)				// 从is中读取一行赋给s,返回is
s.empty()					// s为空返回true
s.size()					// 返回s中字符的个数
s[n]						// 返回s中第n个字符的引用
s1+s2						// 拼接s1、s2
s1==s2&s1!=s2				// s1和s2的比较,大小写敏感
<,<=,>,>=

使用getline读取一整行

getline(istream, object)

getline只要一遇到换行符就结束读取操作并返回结果,哪怕输入的一开始就是换行符也是如此。

string::size_type类型

如果一条表达式中已经有了size()函数就不要再使用int了,这样可以避免混用intunsigned可能带来的问题。

字面值和string对象相加

当把string对象和字符字面值及字符串字面值混在一条语句中使用时,必须确保每个加法运算符(+)的两侧的运算对象至少一个是string

因为某些历史原因,也为了与C兼容,所以C++语言中的字符串字面值并不是标准库类型string的对象。

3.2.3 处理string对象中的字符

cctype头文件中的函数

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值