哈希表
value初始值基本都是0啊、空啊(根据定义的数据类型)
#include <unordered_map>;
unordered_map<char, char> mp; //<>里是两边的数据类型
mp['a'] = 'b';
if(mp.count(x)){} //判断哈希表中是否存在元素x(一般老说返回的是0或1)
if(mp.find(x)!=mp.end()){
it = mp.find(x);
cout<< it->second;} //另一种判断是否存在的方法,如果存在输出对应的值
另一种定义方式:
#include <map>;
map<int, vector<int>> mp;
遍历hashmap:
for(auto it=Hashmap.begin();it!=Hashmap.end();it++)
{
int front = it->first; //key
int end = it->second; //value
}
集合
unorder_set<char> s;
s.insert("a");
s.count("a"); //判断元素是否出现
s.erase("a"); //删除
map删除也可以用erase,erase的参数可以是key,也可以是迭代器(mp.erase(it++)),删除完之后迭代器要指向下一个元素。
二元组以及如何定义二元组
#include <utility>
vector<pair<int, int>>res;
res.push_back(make_pair(a.b));
bool cmp1(pair<int, int> a, pair<int,int> b){
return a.second < b.second;//根据右边半径的值升序排序
}
//用新定义的方法进行排序
sort(res.begin(), res.end(),cmp1);
链表
struct ListNode {
int val;
ListNode *next;
ListNode() : val(0), next(nullptr) {}
ListNode(int x) : val(x), next(nullptr) {}
ListNode(int x, ListNode *next) : val(x), next(next) {}
};
ListNode *head = nullptr;
head->next = new ListNode(sum % 10);
ListNode* dummy = new ListNode(0, head); //哑结点
二叉树
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode() : val(0), left(nullptr), right(nullptr) {}
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
};
TreeNode* root(0);
栈
#include <stack>;
stack<TreeNode*> stk;
stk.push(root);
stk.pop();
//判断栈是否空
if(stk.empty()){
}
队列
#include <queue>;
queue<int> myqueue;
myqueue.push(a);
myqueue.pop();
字符串
string a
int len = a.length() //判断长度
int len2 = a.size() //另一种计算长度
for(int i = 0; i < len; i++){ //遍历字符串的字符
a[i]...
}
//将字母映射为数字
string a = 'abcd'
int index = a[i] - 'a' //将a变成0
数组(矢量)
定义二维数组:
vector<vector<int>> f(m + 1, vector<int>(26, 0));
创建一个二维数组,类型是int。m + 1代表行数(第一维),vector<int>(26, 0)代表每一行的数据是[0] * 26。
其实vector<int>(26, 0);
往数组里添加/删除元素:
vector<int> nums(5,0);
nums.push_back(51);
nums.pop_back(); //从尾端删除元素
cout << nums.size()
删除指定元素:
for(auto iter=num.begin();iter!=num.end();iter++){ //从vector中删除指定的某一个元素
if(*iter==k){
nums.erase(iter);
break;
}
}
循环
for(auto a: nums)
for(auto [a,b]:numss)
排序
sort(nums.begin(),nums.end())
输入数据
假设输入数据为
5(代表有几个数据)
2 4 7 6 5
#include <iostream>
#include <vector>
using namespace std;
int main(){
int n,number;
vector<int> list;
cin >> n;
for(int i=0; i<n;i++){
cin >> number;
list.push_back(number);
}
for(int i=0;i<n;i++){
cout << list[i] << ' ';
}
}
判断是否读到了换行符:
if(cin.get() == '\n')
如果输入的是字符串,由“,”隔开
如: 12,23,34,45,56
我们要提取其中的数字:
1 #include<bits/stdc++.h>
2 using namespace std;
3 int main() {
4 string ns;
5 while(getline(cin, ns)) {
6 vector<string> s;
7 stringstream ss(ns);
8 //getline()可以实现对流的自定义读取,使用stringstream将一个字符串变成了流,这样能被getline使用。
9
10 while(getline(ss,ns,',')) //这个程序也适用于其他符号隔开的输入,如“;”、“-”等,只要是一个字符长度的就可以
11 s.push_back(ns);
12
13 sort(s.begin(),s.end());
14 for(int i=0; i<s.size(); i++) {
15 if(i==s.size()-1)
16 cout<<s[i]<<endl;
17 else
18 cout<<s[i]<<' ';
19 }
20 s.clear();
21 }
22 }
string 转 int:
string s = "12";
int a = atoi(s.c_str());
. 和 ->
有如下结构体:
struct Empolyee{
int age;
char name[15];
}
指针用->
引用 其他用.
拷贝
strcpy拷贝字符串,遇到\0停止
strcpy(char* dest, const char* src)
memcpy复制内存
memcpy(void* dest, const void* src, size_t size)
memset内存初始化
memset(开始地址, 初始化值, size(字节))
请注意这是按照字节赋值的!