1.main函数的返回类型一定是int
2.C++语言为我们准备了一组内置库,包含了很多常用的功能, 并且这些内置库可以直接使用,而其中的内置库:iostream,就提供了输入和输出的功能,允许开发者从键盘读取输入并在屏幕上输出结果。
3.在 iostream 库 中,我们有两个对象可以使用,分别是cin 和cout。
cin 是一个标准输入流对象,用于从键盘读取输入。
cout 是一个标准输出流对象,用于向屏幕输出结果。
4.std 是一个命名空间,:: 符号是作用域操作符。
当使用C++标准库的功能时,需要使用命名空间限定符来指明你要使用的内容位于哪个命名空间中。通常,会使用 std:: 的前缀,表示正在使用C++标准库中的内容。
5.逻辑非运算符!: 将条件判断的值取反后返回,真的取反后为假的,假的取反后为真的。
6.复合赋值运算符+=
7.数组的倒序与隔位输出
vector的概念和特点,以及和数组的区别
vector的声明、访问、以及操作方法
vector (被称为容器),做为C++ 标准库中的一个容器类,表示对象的集合,它可以动态地存储一组元素,所以你可以根据需要轻松地调整 vector 的大小。
//声明
include
using std::vector;
//创建
vector
vector
vector
//在数组尾部增加一个
myVector.push_back(6); // 往容器的最末端添加数字6
//数组大小
int size = myVector.size(); // 获取vector的大小
//删除尾部
myVector.pop_back(); // 删除vector末尾的元素
myVector.clear(); // 清空vector中的所有元素
myVector.empty(); // 判断vector是否不含有任何元素,如果长度为0,则返回真,否则,返回假
8.字符串string(平均绩点)
//声明
include
using std::string;
//创建
string s1; // 默认初始化,s1是一个空的字符串
string s2 = "hello"; // 初始化一个值为hello的字符串
string s3(5, 'a') // 连续5个字符a组成的串,即'aaaaa'
//字符串拼接///////////
string s1 = "hello";
string s2 = "world";
string s3 = s1 + " " + s2; // 对字符串进行连接,拼接之后的字符串是"hello world", 中间加了空格
//字符串长度
int length = s1.size(); // 字符串的长度即字符串中字符的个数,"hello"的长度为5
//判断字符串空
if (s1.empty()) {
// 如果字符串为空则返回true, 否则返回false
}
//字符串输入
//常规版:遇到空格就会停止
int main() {
string word;
while(cin >> word) { // 反复读取,直到到达末尾
cout << word << endl; // 读取一个字符串并将其存储在 word 变量,然后输出,会附加一个换行符
}
}
//getline()遇到换行符才会停止
int main() {
string line;
// 获取用户输入的一行文本,并将其存储到line变量中
getline(cin, line);
// 输出读取的一行文本
cout << line << endl;
}
9.printf 函数
//声明
include <stdio.h>
//字符串
"%.2f" 表示输出一个浮点数并保留两位小数
printf("%.2f\n", sum / count);
对于
3
abac
sc
ajgdahi
这样的数据,每行数据后面都有回车符
////////////////
cin >> n 会在读取完整数之后留下一个换行符在输入缓冲区中,导致
getline(cin, s) 会直接读取这个换行符,从而得到一个空字符串
////////////////
cin.ignore(); // 忽略换行符
getchar()//也可以,效果相同
10.ASCII码中,小写的a是97,大写字母比小写字母小32
11.链表
与数组不同,链表的元素存储可以是连续的,也可以是不连续的
int *ptr = nullptr;
// 初始化为空指针
ListNode *newNode = new ListNode(val);
// 通过new构造一个新的节点,节点的值为val
struct ListNode{
int val;
ListNode* next;
ListNode(int x) :val(x),next(NULL) {}
//节点的构造函数
//默认的只有一个无参的构造函数
}
12.哈希表
set不能存自定义的key值,map可以
unordered是哈希表,存储的元素无序
multi可以存重复的数
//头文件
// 引入<unordered_set>头文件
include <unordered_set>
// 引入set头文件
include
include
include<unordered_set>
//#include
//必须要注意unordered_set之间有_
//但multiset之间没有_
//创建方式,类似vector
unorderedset
set
multiset
//插入
myset.insert(1);
//删除
myset.erase(1);
//判断是否存在
myset.find(i)!=myset.end()
//清空之前的数据
myset.clear();
//遍历
for(set
cout<<*i<<endl;
}
13.迭代器iterator
迭代器都拥有名为begin()和end()的成员,
表示指向第一个元素和
最后一个元素的下一个元素的迭代器(尾后迭代器),
如果容器为空,则begin和end返回的是同一个迭代器。
可以使用比较运算符来判断两个迭代器是否相等,
如果迭代器想要从一个元素移动到另外一个元素,
可以使用递增++运算符和递减--运算符,
表示向前(后)移动一个位置。
通过解引用*可以获取迭代器所指的对象,
下面的示例表示了vector的遍历
//创建一个vector的迭代器
vector
vector
for(it=myvector.begin();it!=myvector.end;++it){
cout<<*it<<endl;
//类似指针方式的解码
}
14.map
把map称之为映射,
就是将一个元素(通常称之为key键)与一个相对应的值(通常称之为value)关联起来
// 头文件
// 引入unordered_map头文件,包含unordered_map类型
include <unordered_map>
// 引入map头文件,包含map类型和multimap类型
include
//创建
//需要指明键和值的类型
map<string,int> mymap;
//将字符串映射到整数的map
//增加
myMap["math"] = 100;
myMap["english"] = 80;
map.insert(make_pair("jack",10));
//删除
map.erase("jack");
map<string,int>::iterator myiterator=mymap.begin();
map.erase(myiterator);
//是否存在
mymap.find("math")!=mymap.end()
//对map内键值对进行遍历
int x=10;
for(const pair<string,int>& kv:mymap){
if(kv.second==x) {
cout<<kv.frist<<endl;
break;
}
}
//pair表示两个变量类型的组合
//&表示引用,每次都直接使用Pair的地址,
//以便不重复创建变量
15.pair表示两个变量类型的组合
&表示引用,每次都直接使用Pair的地址,
以便不重复创建变量
//对map内键值对进行遍历
int x=10;
for(const pair<string,int>& kv:mymap){
if(kv.second==x) {
cout<<kv.frist<<endl;
break;
}
}
//pair表示两个变量类型的组合
//&表示引用,每次都直接使用Pair的地址,
//以便不重复创建变量
哈希表总结
include
include
include
include<unordered_set>
include<unordered_map>//不要忘记unordered_set之间的横杠
using namespace std;
//set、map增加不同,set用insert,map用map[first]=second;
//删除相同,都用erase(first)
//遍历都是迭代器,unordered_set
//begin() end()
int main() {
//srand(time(NULL));
//unordered_set<int> myset;//无序哈希表
//for (int i = 1; i < 10; ++i) myset.insert(i);//将1-9输入
//for(int i = 1; i < 10; ++i) {
// int a = rand()%9;//随机函数rand可以生成随机范围的整数值
// //cout << a << endl;
// if (rand() % 9 > 5)
// myset.erase(i);
//}
//for (unordered_set<int>::iterator i = myset.begin(); i != myset.end(); ++i) {
// cout << *i << endl;
//}
srand(time(NULL));
unordered_map<char,int> mymap;//无序哈希表
//添加
for (int i = 1; i < 10; ++i) {
char a = 'a' + i;
//mymap[a]=i;
mymap.insert(make_pair(a, i));
}
//遍历
for (unordered_map<char,int>::iterator i = mymap.begin(); i != mymap.end(); ++i) {
cout << i->first<< i->second <<" ";
}
cout<<endl;
//删除
for (int i = 1; i < 10; ++i) {
int a = rand() % 9;//随机函数rand可以生成随机范围的整数值
//cout << a << endl;
if (rand() % 9 > 5) mymap.erase('a'+i);//只能从i->first来删除
}
//遍历
for (unordered_map<char, int>::iterator i = mymap.begin(); i != mymap.end(); ++i) {
cout << i->first << i->second << " ";
}
cout << endl;
//查找
char a='a';
auto iter = mymap.find(a);
/////当找不到时,会返回mymap.end()
system("pause");
}
16.栈stack
//头文件
include
//创建
stack
//入栈,出栈
st.push(1);
//vector v.push_back;v.pop_back;
st.pop();//不能输入值
//map.erase("jack")和set.erase(1)可以删除指定元素
//判断为空
st.empty()!=0
//取栈顶元素
st.top();
17.queue队列
//头文件
include
//创建
queue
//判断空
bool set = q.empty();
//入队,出队
q.push(1);
q.pop(1);
//访问队头元素,不会出队,栈是s.top()
q.front();