ccfcsp打印24.9

哈希表 

unordered_set<int> mySet;
mySet.insert(6);   //插入元素
mySet.size()    容器中元素的数量
mySet.empty()    如果是空就true
mySet.insert(10);     插入元素,如果元素已存在,则不会插入
mySet.find(20);     查找元素,如果找到,返回一个指向元素的迭代器;如果未找到,返回一个指向 end() 的迭代器。(找到这个元素的位置)
mySet.count(30)    因为 unordered_set 中元素唯一, 如果元素存在返回1 不存在返回0
mySet.erase(it);    擦除迭代器 it 指向的元素(可以和find配合,删除某个元素)
mySet.clear();       擦除全部元素

unordered_map<int, string> map;
//输入
for (int i = 0; i < 5; ++i) {
        cin >> key;
        cin >> value;
        map[key] = value;
    }
map.insert({4, "four"});    //插入元素
string value = map[3];      //访问元素
if (map.find(2) != map.end()) {      //检查键是否存在
    // 键 2 存在
}
map.erase(2); // 删除键为 2 的元素
map.erase(map.begin()); // 删除迭代器指向的元素
//遍历
auto it = map.begin(); // 获取开始迭代器
for (auto it = map.begin(); it != map.end(); ++it) {
    std::cout << it->first << " => " << it->second << std::endl;
}
unordered_map<int, int> map;
auto it = map.find(2);
if (it != map.end()) {
    cout << it->second << endl; // 找到并访问值
}
map.erase(2); // 删除键为 2 的元素
map.erase(map.begin()); // 删除迭代器指向的元素
//传统迭代器遍历
for (auto it = map.begin(); it != map.end(); ++it) {
    cout << it->first << " => " << it->second << endl;
}
//c++11以上遍历
for (const auto& pair : map) {
    cout << pair.first << " => " << pair.second << endl;
}

size_t size = map.size();   //容器大小
bool isEmpty = map.empty();    //是否为空

pair数对

pair<int, int> intPair;  //常规定义
cin >> myPair.first;
cin >> myPair.second;
//结合动态数组
vector<pair<int, int>> intPair;
//关于输入操作
int size;
cin >> size;  //确定大小
for (int i = 0; i < size; ++i) {
   int first, second;
   cin >> first >> second;
   intPair.push_back({first, second});
}
//关于输出
 for (size_t i = 0; i < intPair.size(); ++i) {
        cout << "Index " << i << ": (" << intPair[i].first << ", " << intPair[i].second << ")" << endl;
    }
// 修改第一个 pair
    intPair[0].first = 10;
    intPair[0].second = 20;
// 排序(默认按照 pair 的第一个元素排序)
    sort(intPair.begin(), intPair.end());

priority_queue<int> max_heap;  //默认是最大堆
max_heap.push(3);   //添加
int top_element = max_heap.top();   //访问最大元素2
max_heap.pop();    //移除堆顶

//定义一个最小堆
struct Compare {
    bool operator()(int lhs, int rhs) {
        return lhs > rhs; // 最小堆
    }
};
int main() {
    priority_queue<int, vector<int>, Compare> min_heap;
    min_heap.push(1);
}

栈(后进先出)

stack<int> myStack;
myStack.push(10);   //添加
myStack.top();      //查看栈顶
myStack.pop();      //移除栈顶
if (!myStack.empty()) {
        //还有元素 不是空的
    }

队列(后进后出)

queue<int> myQueue;
myQueue.push(10);   //只能往后边添加
myQueue.front()   //检查队首
myQueue.pop();   //移除队首
if (!myQueue.empty())   //检查是否为空

 二叉树结构

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 = new TreeNode(rootVal);
cin >> root->val;
//左边
root->left = new TreeNode(leftVal);
//右边
root->right = new TreeNode(rightVal);

 链表结构

struct ListNode {
    int val;
    ListNode *next;
    explicit ListNode(int x) : val(x), next(nullptr) {}
};
int main() {
    // 创建链表 1->2->3->nullptr
    ListNode *head = new ListNode(1);
    head->next = new ListNode(2);
    head->next->next = new ListNode(3);
    head->next->next->next = nullptr; // 链表结束
}

//关于遍历使用
ListNode *node = head;  //一个传递方法
printList(node);  //定义函数

void printList(ListNode* node) {
    while (node != nullptr) {
        cout << node->val << "->";
        node = node->next;
    }
}

 动态数组

vector<int> vec = {1, 2, 3, 4, 5};

vec.push_back(4); // 在 vector 末尾添加元素
vec.push_front(0); // 在 vector 开头添加元素(需要包含 <algorithm>)
vec.pop_back(); // 删除最后一个元素
vec.erase(vec.begin() + 1); // 删除第二个元素
//遍历
for (int i = 0; i < vec.size(); ++i) {
    cout << vec[i] << " ";
}
sort(vec.begin(), vec.end());//升序排序
sort(vec.begin(), vec.end(), greater<int>());   //降序
sort(vec.begin(), vec.end(), compare);  //降序的另一种方法 需要定义compare
//bool compare(int a, int b) {
//    return a > b;
//}

//去重 
vector<int> vec = {1, 2, 2, 3, 4, 4, 5};
sort(vec.begin(), vec.end());
vec.erase(unique(vec.begin(), vec.end()), vec.end());


//关于常用的vector<vector<string>>
 vector<vector<string>> matrix = {
        {"one", "two"},
        {"three", "four"}
    };
// 删除矩阵中的行
matrix.pop_back();

// 删除特定行的列元素
matrix[1].pop_back();

关于string和char的基本操作

//string
string str1 = "Hello, ";
string str2 = "World!";
string str3 = str1 + str2; // str3 现在是 "Hello, World!"

int length = str.length();
if (str1 == str2){}   //比对

string toFind = "World";
int pos = str.find(toFind); // 查找子字符串 "World" 的位置

str.insert(7, ", there"); // 在位置 7 插入 ", there"
str.erase(5, 5); // 删除从位置 5 开始的 5 个字符
str.replace(6, 5, "there"); // 将 "World" 替换为 "there"

//char
string str = "A";
char ch = str[0]; // ch 现在是 'A'

大小写转化

 char ch = 'A';
 ch = toupper(ch);  //小写变大写
 ch = tolower(ch);  //大写变小写
 cout << ch << endl; // 输出: a

//对于string类型
string str = "Hello, World!";
    // 转换为小写
    transform(str.begin(), str.end(), str.begin(),
        [](unsigned char c) -> unsigned char { return std::tolower(c); });
    cout << "Lowercase: " << str << endl;

关于强制类型转化

//c++11及以上 int到string
int main() {
    int num = 123;
    string str = to_string(num);
    cout << str << endl; // 输出: 123
    return 0;
}

//int->char
int num = 65; // ASCII for 'A'
char ch = static_cast<char>(num);
//char->int 
char ch = 'A';
int num = static_cast<int>(ch);

输出

  double pi = 3.141592653589793;
  printf("%.2f\n", pi); // 输出: 3.14

数学计算

//基本
abs(x):计算整数 x 的绝对值。
fabs(x):计算浮点数 x 的绝对值。
floor(x):计算不大于 x 的最大整数。
ceil(x):计算不小于 x 的最小整数。
sqrt(x):计算 x 的平方根。
pow(x, y):计算 x 的 y 次幂。
exp(x):计算 e 的 x 次幂(自然指数函数)。
log(x):计算 x 的自然对数。
log10(x):计算 x 的以 10 为底的对数。
//三角函数
sin(x):计算 x 的正弦值(x 以弧度为单位)。
cos(x):计算 x 的余弦值(x 以弧度为单位)。
tan(x):计算 x 的正切值(x 以弧度为单位)。
asin(x):计算 x 的反正弦值(结果以弧度为单位)。
acos(x):计算 x 的反余弦值(结果以弧度为单位)。
atan(x):计算 x 的反正切值(结果以弧度为单位)。
atan2(y, x):计算两点 (x, y) 与原点之间的角度(结果以弧度为单位)。
//双曲函数
sinh(x):计算 x 的双曲正弦值。
cosh(x):计算 x 的双曲余弦值。
tanh(x):计算 x 的双曲正切值。

//关于圆计算
#ifndef M_PI
#define M_PI 3.14159265358979323846

弧度=角度×(M_PI/180°)

//角度转化为弧度
 double degrees = 90.0;
 double radians = degrees * M_PI / 180.0;
//然后就可以计算三角函数
 eg:sin(radians);


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值