C++ Primr学习笔记(C++基础)


变量和基本类型


字符串 向量和数组


命名空间的using声明

C++语言引入命名空间(Namespace)这一概念主要是为了避免命名冲突,其关键字为 namespace。
使用using声明避免每一次显示声明命名空间 用法
using namespace::name;
例如

#include <iostream>
using std::cin;

int main()
{
    int i;
    cin >> i;
    std::cout << i;
    return 0;
}

按照规定 推荐每个名字都需要有单独的using声明
且头文件中不应包含using声明 避免始料未及的名字冲突


标准库类型string

可变长的字符序列
使用string类型必须包含头文件
string类型包含在命名空间std中
定义和初始化string有以下几种方式

string s1;     		// 默认初始化 s1是一个空字符串
string s2 = s1;	 	// s2是s1的副本 拷贝初始化
string s3 = "hiya"; // s3是该字符串字面值的副本 拷贝初始化
string s4(2, 'c');  // s4的值是"cc" 直接初始化

直接初始化和拷贝初始化

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


基本操作

在这里插入图片描述


string对象的输入输出

读取输出string对象使用cin cout
cin读入遇到空格或换行停止
读取一整行的string对象使用getline()

string s1, s2;
cin >> s1;
getline(cin, s2);

getline()读取一行忽略了最后的换行符
size()函数返回的是一个unsigned类型的整数(注意不要随便喝int混用 以及判断越界情况)
比较 相加 赋值都是比较简单的 自己敲代码尝试可以
把string当做字符数组处理可以


empty()方法

empty()方法根据string对象是否为空返回一个布尔值

string str;
if (str.empty())
{
	cout << "str is empty";
}

size()函数和string::size_type类型

string str;
string::size_type len = str.size();

size()函数返回string对象的长度
size()函数返回的是一个string::size_type类型的变量
string::size_type是一种无符号整形
注意 不要将无符号整形和int混用 会产生意想不到的后果
在这里插入图片描述


string对象的比较

在这里插入图片描述


string对象的赋值和相加

对于string对象而言 允许直接把一个对象赋值给另一个对象

string str1(10, 'c');
string str2 = str1;				// 这样直接赋值string对象是合理的

string对象的相加可以直接使用加法运算符 + 把两个string对象拼接到一起
也可以使用假发运算符把string对象和字面值相加
字面值就是类似于"asdashdhaskjhdkjas"这种双引号中的字面字符串
在这里插入图片描述
注意 不能直接把两个字面值相加 必须确保语句中加法运算符两侧的运算对象至少有一个是string
在这里插入图片描述


cctype头文件以及C++规范的头文件格式

在这里插入图片描述
划重点 我一直倾向于C++的程序就用C++的写法 虽然C++是兼容C 并且为了兼容C做了很多的工作
但是在某些特性上 我还是倾向于用C++的写法 比如以下

在这里插入图片描述


范围for遍历string对象

range for是C++11标准提供的一种新语句 语法形式为
for (declaration : expression)
statement
其中 expression是一个对象 标示序列 declaration部分负责定义一个变量 用于访问序列中的基础元素
auto:C++11中,auto不再是一个存储类型指示符,而是一个自动推导变量的类型
decltype:选择并返回操作数的数据类型。在此过程中,编译器只是分析表达式并得到它的类型,却不进行实际的计算表达式的值。
关于auto和decltype的具体定义和使用参考本文上面的描述 这里不做具体阐述

string str("some thing");
for (auto c : str)
{
	cout << c << endl;
}

上述代码中使用auto关键字决定c的类型 这里是char 每次迭代 将str的下一个字符拷贝到c 通过cout流输出
在看下面的例子

string str("Hello, World!!");
decltype(str.size()) cnt = 0;
for (auto c : str)
{
	if (ispunct(c))		// 判断c是不是标点符号 ispunct的定义参考上文
	{
		++ cnt;
	}
}
cout << cnt << endl;

使用范围for改变string对面的值

如果想要改变string对象的值 就必须把循环变量定义为引用类型

string str = "dasjbdekjasdhashdkj"
for (auto & c : str)    // 注意这里定义的是&c 而不是c 我们这里定义c的引用才能通过改变c改变str的值
{
	c = toupper(c);
}
cout << str << endl;

下标运算符([])(索引)

下标运算符接收的输入参数是string::size_type类型的值
string对象的下标从0开始计算 最后一个字符是s[s.size() - 1]
在这里插入图片描述
下标的值被称为下标或者索引 任何表达式的值只要是一个整数就可以作为索引
如果索引是有符号整数(例如int值)将自动转换为string::size_type类型的无符号整数
在这里插入图片描述
划重点 如果索引位置的string没有值就会产生数组越界的报错 程序会中断 所以访问一定要判断string的范围 确保在范围内访问
在这里插入图片描述
在这里插入图片描述
再次强调 不要越界 保证索引的合法 很多很多很多很多新手都会在这个地方跌倒无数次


标准库vector

相同对象的集合
因为容纳着其他对象 所以也被称之为容器
使用头文件
在命名空间std中
使用vector必须包含以下语句

#include <vector>
using std::vector;

vector 是一个类模板(class template)


表达式


语句


函数



猜你喜欢

转载自blog.csdn.net/u012431590/article/details/93480303