好文章 :
整理leetcode刷題過程中遇到的常用庫(kù)函數(shù)(c++)
https://blog.csdn.net/i_choose_game/article/details/125585562
C++ 常用頭文件
#include <algorithm> //通用算法
#include <deque> //雙端隊(duì)列容器
#include <list> //線性列表容器
#include <map> //映射容器
#include <iostream> //基本輸入輸出流
#include <queue> //隊(duì)列容器
#include <set> //集合容器
#include <stack> //堆棧容器
#include <string> //字符串類
#include <vector> //動(dòng)態(tài)數(shù)組容器
#include <hash_map> //字典(hash map)
#include <math> //數(shù)學(xué)函數(shù)類
結(jié)構(gòu)體生成內(nèi)存申請(qǐng)
malloc與new,C++中的指針與引用术吝,C++struct與class的區(qū)別
- new 不但分配對(duì)bai象空間, 還會(huì)在分配后調(diào)用對(duì)du象的構(gòu)造器, 而 malloc 只是分配zhi, 不構(gòu)
- new 分配時(shí)要指定類型, 是類型安全的; 而 malloc 返回的是 void *, 類型不安全; 類型不安全的東西在 C++ 里是不被提倡的!
## malloc
ListNode* l = (struct ListNode *)malloc(sizeof(struct ListNode));
## new
ListNode* l = new ListNode(0);
std::vector<char> * 轉(zhuǎn)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 排序
字母用數(shù)組替代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數(shù)字轉(zhuǎn)int類型
例如把char a = ‘2’ 轉(zhuǎn)2 :int num = a-'0';
c++ 將一個(gè)char 轉(zhuǎn)化為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);
}
刪除所有元素
————————————————
版權(quán)聲明:本文為CSDN博主「「已注銷」」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議传藏,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明彤守。
原文鏈接:https://blog.csdn.net/zvall/article/details/52267007
C++ Vector 基本使用
C++ vector 刪除元素
vec.pop_back()
在vector中有三種涉及刪除的方法,第一種是vector::clear()具垫,第二種是vector::erase(),第三種是vector::pop_back()。clear用來清空整個(gè)vector抡草,同時(shí)將size變成0,無返回值燎含;erase通過傳入迭代器進(jìn)行刪除,既可以刪除單個(gè)元素屏箍,也可以刪除某一范圍的元素,刪除之后它將返回下一個(gè)位置的迭代器赴魁;pop_back用來刪除末尾元素,同時(shí)將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;
}
}
這個(gè)代碼如果不在for循環(huán)里加上最后的判斷會(huì)導(dǎo)致錯(cuò)誤禽最,原因在于,當(dāng)it指向最后一個(gè)2時(shí)弛随,滿足刪除條件,刪除后it變成了end栓票,然后又做了++操作愕够,導(dǎo)致越界。
類似的坑還有許多惑芭,這里就不一一列舉了,總之逃沿,它們的共同點(diǎn)在于對(duì)vector進(jìn)行刪除時(shí)都不夠優(yōu)雅幻锁,需要進(jìn)行一些額外的處理避免誤操作。
原文鏈接: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 反轉(zhuǎn)
reverse(res.begin(),res.end());
C++ Vector 預(yù)分配大小
std::vector<int> nums(count); // 預(yù)分配 count 個(gè)空間假消。
// 加上默認(rèn)賦值
std::vector<int> nums(count,default_num);
// 或者
std::vector<int> nums;
nums.resize(5);
C++ 棧的使用
注意 pop()函數(shù)是沒有返回的岭接,需要先
auto val = stack1.top();
stack1.pop();
和其他序列容器相比臼予,stack 是一類存儲(chǔ)機(jī)制簡(jiǎn)單粘拾、所提供操作較少的容器谅阿。下面是 stack 容器可以提供的一套完整操作:
top():返回一個(gè)棧頂元素的引用,類型為 T&寓涨。如果棧為空,返回值未定義戒良。
push(const T& obj):可以將對(duì)象副本壓入棧頂冠摄。這是通過調(diào)用底層容器的 push_back() 函數(shù)完成的。
push(T&& obj):以移動(dòng)對(duì)象的方式將對(duì)象壓入棧頂沃呢。這是通過調(diào)用底層容器的有右值引用參數(shù)的 push_back() 函數(shù)完成的拆挥。
pop():彈出棧頂元素。
size():返回棧中元素的個(gè)數(shù)纸兔。
empty():在棧中沒有元素的情況下返回 true。
emplace():用傳入的參數(shù)調(diào)用構(gòu)造函數(shù)崎坊,在棧頂生成對(duì)象。
swap(stack<T> & other_stack):將當(dāng)前棧中的元素和參數(shù)中的元素交換奈揍。參數(shù)所包含元素的類型必須和當(dāng)前棧的相同赋续。對(duì)于 stack 對(duì)象有一個(gè)特例化的全局函數(shù) swap() 可以使用。
C++ 隊(duì)列(queue)的使用
入隊(duì)(push)
出隊(duì)(pop)
判斷隊(duì)列是否為空(empty)
統(tǒng)計(jì)隊(duì)列元素的個(gè)數(shù)(size)
訪問隊(duì)首元素(front)
C++ sort
sort(vec.begin(), vec.end());
C++ Vector直接賦值
vector<int> nums = {1,2};
C++ Vector 和 set 互相轉(zhuǎn)換
vector<int> v;
v = {1,2,2,3,3,4};//建立vector
set<int> st(v.begin(), v.end());//在構(gòu)造函數(shù)中可以直接實(shí)現(xiàn)vector轉(zhuǎn)set
v.assign(st.begin(), st.end());//用assign實(shí)現(xiàn)set轉(zhuǎn)vector
C++ 字符數(shù) stringstream 使用
#include <sstream>
#include <string>
stringstream sstream;
// 將多個(gè)字符串放入 sstream 中
sstream << "first" << " " << "second";
sstream << " third times";
cout << "輸出字符串: " << sstream.str() << endl;
// 清空 sstream
sstream.str("");
sstream << "one more time";
cout << "清空字符串后,輸出為: " << sstream.str() << endl;