C++数据结构与算法
https://blog.csdn.net/weixin_36888577/article/details/79937886
股票买卖专题
https://blog.csdn.net/humanleelxy/article/details/78420274
零碎的C++知识
精度
float有7尾有效数字
double有16位
移位操作:>> 右移 数字变小 7变3
C++引用变量
https://blog.csdn.net/qq_40873884/article/details/79632314
值传递
void Swap(int a, int b)
Swap(a, b);
指针传递
void Swap(int* a, int* b)
Swap(&a, &b);
引用传递
void Swap(int& a, int& b)
Swap(a, b);
新型引用+值传递
int Swap(const int& ra);
Swap(ra);
引用变量作为返回值 注意传入int& Swap(int& a, int& b) return a;int m=Swap(a, b); 或者传入全局变量或静态变量
const不可改变的变量
static只初始化一次,a++会一直加下去,调用一次函数加一次
struct结构体 重载运算符
struct point
{
int elem;
bool operator==(const point b) const
{
return this->elem == b.elem;
}
}
面向对象的抽象封装继承多态(刷题用不到就不写了)
指针(不知道要用到多少 复制构造函数、析构函数、函数引用变量、函数指针)
STL容器(即数据结构)
概述
- vector deque
- list set multiset map multimap
- stack queue priority_queue
empty() max_size() size() swap() operator=
六个关系运算符(priority_queue除外)
begin() end() rbegin() rend() erase() clear()(stack queue priorty_queue除外)
迭代器:指针地址 i++,=赋值 == !=(23可用)
<= i+=n i[n] (3可用 比较大小,加n,取n)
vector
声明和初始化
vector v1;
v1.push_bach(1); #逐个加入 (0 1 2 3 4 5)
v1(3,5) #数字重复初始化3个5 (5 5 5)
vector ::iterator i1=v1.begin()+1;
v2(i1, i1+3) #迭代器初始化 (1 2 3)
增加元素
v.insert(v.end(), 和上面一样) #前面索引插到前面 后面索引插到后面 assign同样
删除元素
v.erase(v4.end()-2)
v.erase(v.begin()+2) #注意单个元素删去第二个元素,v.begin()会报错
v.erase(v.begin(), v4.end()-2) # begin end 头尾都要 begin begin 要头不要尾 end end 要尾不要头
取其中元素
v1[1] v1.at(1) #1
vector v11(v1.begin()+1,v1.end()-2); #取一段元素 begin end 头尾都要 begin begin 要头不要尾 end end 要尾不要头
改变capacity和size
v.reserve(6)
v.resize(7) #补0
v.clear() #相当于v.resize(0)
转置元素
printVector(“v4”,v4); // v4 = (1 2 3)
vector::reverse_iterator i3 = v4.rbegin();
for ( ; i3 != v4.rend(); i3++)
cout << *i3 << ’ '; // print: 3 2 1
cout << endl;
算法(非成员函数)
replace(v.begin(),v.end(),0,7) #0全部换成7 包括开头包括结尾
replace_if(v.begin(),v.end(),f1,7) #函数返回bool 接受一个值
sort(v5.begin(),v5.end(),greater()); #降序 默认升序 sort的取片也和上边一样
stack queue priority_queue deque
stack
push; top; pop; empty; size
stack stack1; #默认为双端队列
stack<int, vector> stack2;
stack<int, list> stack3;
for(int j=0;j<9;j++){
stack1.push(j);
}
while(!stack1.empty()){
cout<<stack1.size()<<endl;
cout<<stack1.top()<<endl;
stack1.pop();
}
queue
push front back pop empty size
除了front和back其他的都和stack一样。
priority_queue
默认用vector实现,默认大数先出。
push top pop empty size
注意虽然叫priority_queue成员函数却和stack一样,是top。
priority_queue <int, vector, less > pq1;
priority_queue <int, vector, greater > pq2;
int a[]={4,6,1};
priority_queue pq3(a,a+3);
deque
综合了vector可以访问任意位置元素和list高效插入删除的优点。
list 刷题好像不常用到就不写了
STL算法
sort(begin,begin+N,f) 返回bool类型 接收函数类型和begin、begin+N相同 切块还是和以前一样
reverse(begin,begin+N)
bool ff(int a,int b){
return a<b;
}
int a[5]={1,2,3,4,5};
reverse(a,a+5); //54321
sort(a,a+5,ff); //12345
string.h库
#include <string.h>
#include <string>
cin>>s; #string string
cout<<s; #string遇到空格结束依次输入
printf("%s",b.c_str());
string str;
str.assign(100,'\n'); //这里初始化一个大笑为100的,内容为‘\0'的字符串数组。
scanf("%s",str.c_str()); #遇到空格结束依次输入
getline(cin,str); #接受空格
printf("%c\n",str[2]);
if(str1.find("aaaa") != string::npos)
cout<<"有"<<endl;
else
cout<<"没有"<<endl;
https://www.cnblogs.com/X-Do-Better/p/8628492.html
https://blog.csdn.net/superna666/article/details/52809007
string find
http://www.cnblogs.com/bhd123/p/9453662.html
oj常见错误提示
https://blog.csdn.net/coral_yms/article/details/25161069
算法设计与数据结构】为何程序员喜欢将INF设置为0x3f3f3f3f?
https://blog.csdn.net/jiange_zh/article/details/50198097