https://gitee.com/programmercarl/leetcode-master?_from=gitee_search
- vector遍历和map遍历
std::map<char, int> mymap;
// 插入单个值
mymap.insert(std::pair<char, int>('a', 100));
mymap.insert(std::pair<char, int>('z', 200));
for (auto& iter: mymap){
cout<iter.first;
}
std::vector<int64_t> vec_temp;
for (auto& iter: recall_item) {
vec_temp.push_back(iter.first);
}
for (auto& id: vec_temp) {
cout<<id<<endl;
}
set<int > set1 ;
set1.insert(1);
set1.insert(2);
for(auto &it : set1){
cout<<it<<endl;
}
- set遍历
#include <iostream>
#include<set>
using namespace std;
int main()
{
int numList[6]={1,2,2,3,3,3};
/ /1.set add
set<int> numSet;
for(int i=0;i<6;i++){
//2.1insert into set
numSet.insert(numList[i]);
}
//2.travese set
for(set<int>::iterator it=numSet.begin() ;it!=numSet.end();it++){
cout<<*it<<" occurs "<<endl;
}
//3.set find useage
int findNum=1;
if(numSet.find(findNum)!=numSet.end())
{
cout<<"find num "<<findNum<<" in set"<<endl;
}else{
cout<<"do not find num in set"<<findNum<<endl;
}
//set delete useage
int eraseReturn=numSet.erase(1);
if(1==eraseReturn){
cout<<"erase num 1 success"<<endl;
}else{
cout<<"erase failed,erase num not in set"<<endl;
}
return 0;
}
- 带有pair的vector遍历
#include <iostream>
using namespace std;
#include <vector>
int main(){
std::vector<std::pair<int64_t,double>> vec_temp;
vec_temp.push_back(std::make_pair(5,5.0));
vec_temp.push_back(std::make_pair(4,4.0));
vec_temp.push_back(std::make_pair(3,3.0));
vec_temp.push_back(std::make_pair(2,2.0));
for(auto &item : vec_temp){
cout<<item.first<<" "<<item.second<<endl;
}
}
-
在for循环中删除元素
https://blog.csdn.net/u013288190/article/details/122167859 -
有坑
在刷leetcode的2131. 连接两字母单词得到的最长回文串这题中,发现这个坑
string temp = "";
temp=temp+iter.first[1]+iter.first[0]; //这么写是对的
string temp1 = "";
temp1 = iter.first[1]+iter.first[1]; //这么写是错的
6 创建vecotr
vector<int>nums;//创建整型一维数组
vector<int>nums(n);//指定长度为n
vector<int>nums(5,3);//创建[3 3 3 3 3]
```cpp
//创建row行col列的二维vector
vector<vector<int>> b(row,vector<int>(col));
vector<vector<int>> vectors = {
{0,10,5},
{9,0,6},
{2,13,0}
};
7 vecotr排序
int main(){
vector<int> vec = {2,6,3,5,4,8,1,0,9,10};
sort(vec.begin(), vec.end());
for(int item: vec)
cout << item << " ";
return 0;
}
// out
/*
0 1 2 3 4 5 6 8 9 10
*/
//二维vector中使用lambda排序
sort(vec.begin(),vec.end(),[](vector<int>a, vector<int> b){
return a[1]>b[1];
});
8 C++写文件
#include<fstream>
std::string request = context->m_request->request().value();
ofstream write;
write.open("result_105.txt", ios::app);
write <<request << endl;
write.close();
vecotor的demo
- insert
#include <iostream>
#include<vector>
using namespace std;
void show_vec(vector<int>& vec){
for(int i=0;i<vec.size();i++){
cout<<vec[i]<<" ";
}
cout<<endl;
}
int main(){
vector<int> res(3);
res[0]=0;
res[1]=1;
res[2]=2;
res.insert(res.begin(),3); //3 0 1 2 在0号元素前面插入
show_vec(res);
res.insert(res.begin()+1,4); //3 4 0 1 2 在1号元素前面插入
show_vec(res);
res.insert(res.end(),5); //3 4 0 1 2 5 在最后一个元素后面插入
show_vec(res);
}
- 初始化
vector<int>list={1,2,3,4,5,6,7.0};
//https://leetcode.cn/problems/course-schedule/description/?envType=study-plan-v2&envId=top-interview-150 leetcode150题
vector<int> indegrees(numCourses,0); //numCourses个0
vector<vector> adjacency(numCourses); //numCourses个空的vector组成的数组
vector<vector<bool>> flags(board.size(),vector<bool>(board[0].size(),false));
- vector双向队列用法
//使用back()函数获取最后一个元素。
std::vector<int> vec = {1, 2, 3, 4, 5};
int lastElement = vec.back();
//c++ vector删除第一个元素
std::vector<int> vec = {1, 2, 3, 4};
vec.erase(vec.begin()); // 删除第一个元素
//c++ 删除最后一个元素
vector<int> nums = {1, 2, 3, 4, 5};
nums.pop_back();
- shared_ptr的拷贝
//----------------------test.cpp------------------------
#include <iostream>
#include <memory>
using namespace std;
class Bike{
public:
int price;
};
int main()
{
Bike* bi = new Bike();
(*bi).price = 100;
shared_ptr<Bike> p1 = make_shared<Bike>(*bi);
//输出 p1 指向的数据
cout << "(*p1).price is:" << (*p1).price << endl;
(*p1).price = 200;
cout << "(*p1).price is:" << (*p1).price << endl;
cout << "bi.price is:" << (*bi).price << endl;
return 0;
}
//--------------------终端的命令
g++ --std=c++11 test.cpp
//--------------------终端的结果
$ ./a.out
(*p1).price is:100
(*p1).price is:200
bi.price is:100
数组
//定义数组,如果不初始化,在leetcode的结果是
int a[5][5];
int b[6];
cout<<a[1][1]<<endl; //结果是2281531
cout<<b[3]<<endl; //结果是792210872
初始化方法和结果
int c[5][5]={1}; //c[0][0]是1,其余都是0
int d[6]={1}; //d[0]=1,其余都是0
栈的用法
//其实栈就这几个成员函数
empty() //堆栈为空则返回真
pop() //移除栈顶元素
push() //在栈顶增加元素
size() //返回栈中元素数目
top() //返回栈顶元素
#include<stack>//使用stack时需要的头文件
stack<int> s;//定义一个int类型的stack
map的用法
map<int,int> map1;
map1[1]=2;
auto iter = map1.find(1);
if(iter!=map1.end()){
cout<<iter->second;
}
//查找用count,找的到就返回1,否则返回0
cout << map1.count(1) << endl; // 返回1
cout << map1.count(2) << endl; // 返回0
queue的用法
queues主要由成员函数push(),front(),back(),pop()构成。
push()将元素置入queue中。
front()会返回queue内的下一个元素(也就是第一个被置入的元素)
back()会返回queue的最后一个元素(也就是最后一个被插入的元素)
pop()会从queue中移除一个元素。 //这个函数没有返回值;它仅暗示删除元素
size()返回queue长度。
empty()返回queue是否为空。
deque的用法
iqu[ ]:用来访问双向队列中单个的元素。
iqu.front():返回第一个元素的引用。
iqu.back():返回最后一个元素的引用。
iqu.push_front(x):把元素x插入到双向队列的头部。O(1)
iqu.pop_front():弹出双向队列的第一个元素。O(1)
iqu.push_back(x):把元素x插入到双向队列的尾部。O(1)
iqu.pop_back():弹出双向队列的最后一个元素。O(1)
iqu.insert(it,20),O(n)
iqu.erase(it);从it指向的位置删除元素O(n)
int的值域
int max_val = INT_MAX;
int min_val = INT_MIN;