C++数据结构

哈希表

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(字节))

请注意这是按照字节赋值的!

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值