好文章 :
整理leetcode刷题过程中遇到的常用库函数(c++)
https://blog.csdn.net/i_choose_game/article/details/125585562
C++ 常用头文件
#include <algorithm> //通用算法
#include <deque> //双端队列容器
#include <list> //线性列表容器
#include <map> //映射容器
#include <iostream> //基本输入输出流
#include <queue> //队列容器
#include <set> //集合容器
#include <stack> //堆栈容器
#include <string> //字符串类
#include <vector> //动态数组容器
#include <hash_map> //字典(hash map)
#include <math> //数学函数类
结构体生成内存申请
malloc与new,C++中的指针与引用,C++struct与class的区别
- new 不但分配对bai象空间, 还会在分配后调用对du象的构造器, 而 malloc 只是分配zhi, 不构
- new 分配时要指定类型, 是类型安全的; 而 malloc 返回的是 void *, 类型不安全; 类型不安全的东西在 C++ 里是不被提倡的!
## malloc
ListNode* l = (struct ListNode *)malloc(sizeof(struct ListNode));
## new
ListNode* l = new ListNode(0);
std::vector<char> * 转std::string 的三种方法
cp from https://www.iteye.com/blog/hulefei29-1974759
1. std::vector<char> *data = response->getResponseData();
2. std::string res;
3. //way1
4. for (int i = 0;i<data->size();++i) {
5. res+=(*data)[i];
6. }
7. res+='\0';
8. std:cout << res;
1. std::vector<char> *data = response->getResponseData();
2. std::string res;
3. res.insert(res.begin(), data->begin(), data->end());
4. std::cout << res;
1. std::vector<char> *data = response->getResponseData();
2. std::string res;
3. const char* s = &(*data->begin());
4. res = std::string(s, data->size());
5. std::cout << res;
vector 排序
字母用数组替代hashmap
filter set 的使用
set<string> filter_set; // for filtering
for (auto & item : m_policy_ctx->input_items){
if (filter_set.insert(item->feedid).second)
{
input_items_after_ranking.push_back(item);
}
}
char数字转int类型
例如把char a = ‘2’ 转2 :int num = a-'0';
c++ 将一个char 转化为string
https://blog.csdn.net/carbon06/article/details/79353821
string可以直接+=char
string replaceSpace(string s) {
string ans;
for(int i = 0; i<s.size(); i++) {
if(s[i] == ' ') {
ans +="%20";
}
else ans+=s[i];
}
return ans;
}
class Solution {
public:
string replaceSpace(string s) {
std::string result;
for (int i = 0; i < s.size(); i++) {
if (s[i] == ' ') {
result.append("%20");
}
else {
result.push_back(s[i]);
}
}
return result;
}
};
C++ Set 基本使用
C++ map unordered_map 基本使用
删除
删除键为bfff指向的元素
cmap.erase("bfff");
删除迭代器 key所指向的元素
map<string,int>::iterator key = cmap.find("mykey");
if(key!=cmap.end())
{
cmap.erase(key);
}
删除所有元素
————————————————
版权声明:本文为CSDN博主「「已注销」」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zvall/article/details/52267007
C++ Vector 基本使用
C++ vector 删除元素
vec.pop_back()
在vector中有三种涉及删除的方法,第一种是vector::clear(),第二种是vector::erase(),第三种是vector::pop_back()。clear用来清空整个vector,同时将size变成0,无返回值;erase通过传入迭代器进行删除,既可以删除单个元素,也可以删除某一范围的元素,删除之后它将返回下一个位置的迭代器;pop_back用来删除末尾元素,同时将size减1,无返回值。
一般来讲erase用得比较多,不注意也容易踩坑,例如:
vector<int> vec{1, 4, 3, 2, 5, 2};
for(auto it = vec.begin(); it != vec.end(); it++){
if(*it < 3){
cout << "num is " << *it << endl;
it = vec.erase(it);
if(it == vec.end()) break;
}
}
这个代码如果不在for循环里加上最后的判断会导致错误,原因在于,当it指向最后一个2时,满足删除条件,删除后it变成了end,然后又做了++操作,导致越界。
类似的坑还有许多,这里就不一一列举了,总之,它们的共同点在于对vector进行删除时都不够优雅,需要进行一些额外的处理避免误操作。
原文链接:https://blog.csdn.net/lishichengyan/java/article/details/82669153
正确代码:
vector<int> vec{1, 4, 3, 2, 5, 2};
for(auto it = vec.begin(); it != vec.end();){
if(*it < 3){
cout << "num is " << *it << endl;
it = vec.erase(it);
}
else {
iter++;
}
}
C++ vector 反转
reverse(res.begin(),res.end());
C++ Vector 预分配大小
std::vector<int> nums(count); // 预分配 count 个空间。
// 加上默认赋值
std::vector<int> nums(count,default_num);
// 或者
std::vector<int> nums;
nums.resize(5);
C++ 栈的使用
注意 pop()函数是没有返回的,需要先
auto val = stack1.top();
stack1.pop();
和其他序列容器相比,stack 是一类存储机制简单、所提供操作较少的容器。下面是 stack 容器可以提供的一套完整操作:
top():返回一个栈顶元素的引用,类型为 T&。如果栈为空,返回值未定义。
push(const T& obj):可以将对象副本压入栈顶。这是通过调用底层容器的 push_back() 函数完成的。
push(T&& obj):以移动对象的方式将对象压入栈顶。这是通过调用底层容器的有右值引用参数的 push_back() 函数完成的。
pop():弹出栈顶元素。
size():返回栈中元素的个数。
empty():在栈中没有元素的情况下返回 true。
emplace():用传入的参数调用构造函数,在栈顶生成对象。
swap(stack<T> & other_stack):将当前栈中的元素和参数中的元素交换。参数所包含元素的类型必须和当前栈的相同。对于 stack 对象有一个特例化的全局函数 swap() 可以使用。
C++ 队列(queue)的使用
入队(push)
出队(pop)
判断队列是否为空(empty)
统计队列元素的个数(size)
访问队首元素(front)
C++ sort
sort(vec.begin(), vec.end());
C++ Vector直接赋值
vector<int> nums = {1,2};
C++ Vector 和 set 互相转换
vector<int> v;
v = {1,2,2,3,3,4};//建立vector
set<int> st(v.begin(), v.end());//在构造函数中可以直接实现vector转set
v.assign(st.begin(), st.end());//用assign实现set转vector
C++ 字符数 stringstream 使用
#include <sstream>
#include <string>
stringstream sstream;
// 将多个字符串放入 sstream 中
sstream << "first" << " " << "second";
sstream << " third times";
cout << "输出字符串: " << sstream.str() << endl;
// 清空 sstream
sstream.str("");
sstream << "one more time";
cout << "清空字符串后,输出为: " << sstream.str() << endl;