C++

320 阅读3分钟

类型

// 整型 默认 向下取整
int n=5;
n/3-------1 (1.6)

// 向上取整 (往大了取)
ceil(1.2)------2

// 向下取整 (往小了取)
floor(1.8)-----1
// 最大值
int ans=INT_MAX;

// 最小值
int ans=INT_MIN;

数组

声明

vector<int> num;

// used数组长度为n
vector<bool> used(n);


// table长度为26,里面的元素都为0
vector<int> table(26, 0);
// 'b'-'a'=1;
table[p[i]-'a']++;

// 二维数组 [里面是长度]
int dp[n][2]

长度

num.size()
类型是unsigned(非负数),如果与其他数值进行比较/运算,会将其强行转换为unsigned

// 判断是否为空,如果为空,则返回true
nums.empty()

遍历

for(auto n : num){}

插入

num.push_back(n)

排序

sort(nums.begin(), nums.end())

翻转

reverse(result.begin(), result.end());

<ctype.h>

主要可用于测试和映射字符。

判断是否为字母和数字

isalnum(num[i])

转换为小写字母

tolower(num[i])

转换为大写字母

toupper(num[i])

哈希表

声明

unordered_map

unordered_map<int,int> hashtable;
for (int num : nums1) {
    ++m[num];
}

unordered_set

// STL提供的无序集合的类,集合的特点就是其中没有任何重复的元素,这个特点非常适合用于纪录某个数据中是否有重复的数据,并且将其挑出来。
unordered_set<char> lookup;

1.在集合中查找是否有该元素
lookup.find(s[right])==lookup.end();// true则没找到

2.删除集合中的元素
lookup.erase(s[left]);

3.向集合插入元素
lookup.insert(s[right]);

找主键

1. 查找主键为nums[i] 的位置
auto it= hashtable.find(nums[i]);

2. 判断是否 找到了 该键
it!=hashtable.end()

3. 拿到该键 对应的 值
it->second

// 示例
unordered_map<int,int> hashtable;
for(int i=0;i<numbers.size();i++){
    auto it=hashtable.find(target-numbers[i]);//找键
    if(it!=hashtable.end()){
        return {it->second+1,i+1};
    }
    hashtable[numbers[i]]=i;
}

移除

hashtable.erase(n);

for

for(int num :nums1)

队列

声明

queue<int> q;
queue<TreeNode*> q;

添加/移除元素

// 只能在队尾添加
// start是第一个元素
q.push(start);
// 只能在队头移除
// 移除第一个元素
q.pop();

front()/back()

// 返回 queue 中第一个元素的引用。
// 如果 queue 是常量,就返回一个常引用;如果 queue 为空,返回值是未定义的。
q.front();
// 返回 queue 中最后一个元素的引用。
// 如果 queue 是常量,就返回一个常引用;如果 queue 为空,返回值是未定义的。
back();

元素个数

// 返回 queue 中元素的个数。
queue.size();

判断有没有元素

// 如果 queue 中没有元素的话,返回 true。
queue.empty()

# 声明
stack<TreeNode*> st

# push,入栈
st.push(root);

# 拿到栈顶的元素
st.top();

# 弹出栈顶的元素
st.pop();

树TreeNode

声明

TreeNode* root

判断节点是否为空

 if (root == NULL) return root;

翻转

swap(root->left, root->right);

pair

pair是C++中一种模板类型。每个pair对象可以存储两个值,这两个值可以是不同的数据类型。存储的值可以是基本数据类型也可以是自定义数据类型。

声明命名空间:

using namespace std;
或
using std::pair;
pair<int, int> pdata;
或使用全名
std::pair<int, int> pdata;

定义和初始化

pair<int, int> p1(1, 2);

pair<int, int> p2(p1); //用已有的对象初始化

pair<int, float> p3(1, 1.2);

pair<int, int> p4; //没有显示初始化,自动执行默认初始化操作。p4为(0,0)

赋值操作

使用强制类型转换

pair<int, int> p1(1, 2);

pair<int, int> p2;

p2 = pair<int, int> (1, 4);//赋值操作,需要用强制转换

p2 = p1; //赋值操作

使用make_pair()函数

pair<int, int> p3;

p3 = make_pair(1, 4); //无需指明类型,可自动生成pair对象