文章目录
- 【 字符串相关 】
- C++ 输入输出流
- strcpy_s() 字符串复制
- 输出乱码
- 【 STL 】
- 各个 STL 支持的常见方法
- ? : 运算符
- switch case 运算符
switch(expression)
{
case constant-expression :
statement(s);
break; // 可选的
case constant-expression :
statement(s);
break; // 可选的
default : // 可选的
statement(s);
}
- C++可以不必在程序运行前定义好所有变量。
- 5/2=2,例如:
cout << 5/2;
输出为 2。 - 在 C 语言中,数组的大小必须在使用前已知,并且这个大小在整个程序的运行过程中不能改变,除非使用动态数组。因此,数组的大小通常由常量来定义,而不是变量。这是因为:
- 编译时分配内存:数组在内存中的存储是连续的,编译器需要在编译时知道数组的大小,以便为数组分配足够的连续内存空间。如果数组的大小在编译时未知,编译器就无法进行内存分配。
【 字符串相关 】
C++ 输入输出流
- 输入字符串
char s[100]; cin.getline(s, 100);
- 输入 string类
string s; getline(cin, s);
strcpy_s() 字符串复制
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
char s1[] = "123456"; //普通字符串
int n = sizeof(s1) / sizeof(char);
char* s2 = new char[n]; //动态字符串
strcpy_s(s2, n, s1); //字符串复制
cout << n << endl;
cout << s2<<endl;
return 0;
}
输出乱码
cout << value;
cout会自动根据value的类型进行输出, 当 value 类型为 char* 时,cout会从 value 这个 char * 地址开始遍历地址对应的元素直至遇到 ‘\0’ 字符。- 实例
s1 是字符数组,直接将地址 s1 输出,会因为没有遇到 ‘\0’ 字符输出乱码。
s2 是申请了类型为char大小为n的首地址,对其赋值后,也会由于没有遇到 ‘\0’ 字符输出乱码。
而在 s2 的末位元素赋值为 ‘\0’ 后,将不再出现乱码。
// 将 s1 的前 n 个元素赋值给 s2。
#include <iostream>
using namespace std;
int main()
{
int n;
cin >> n;
char s1[] = {'1','2','3','4','5'};
char* s2 = new char[n];
for (int i = 0; i < n; ++i)
s2[i] =s1[i];
cout << s2 <<endl;
s2[n] = '\0';
cout << s2 <<endl;
return 0;
}
【 STL 】
各个 STL 支持的常见方法
STL名称 | 支持的常见方法 |
---|---|
vector | 大小:size() 尾添加:push_back() 头尾指针: begin()、end() |
deque | 大小:size() 头尾添加:push_front()、push_back() 头尾删除:pop_front()、pop_back() 头尾指针: begin()、end() |
set | 大小:size() 插入:insert()、emplace() 删除:erase() 查找: find() 最小的大于 val 的元素:upper_bound() 头尾指针: begin()、end() |
map | 大小:size() 插入:insert()、emplace() 删除:erase() 查找: find() 头尾指针: begin()、end() 最小的大于 val 的元素:upper_bound() 头尾指针: begin()、end() |
stack | 大小:size() 压栈:push() 栈顶元素删除:pop() 栈顶指针: top() |
queue | 大小:size() 尾添加:push() 头删除:pop() 头尾指针: front()、back() |