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容器(即数据结构)

概述

  1. vector deque
  2. list set multiset map multimap
  3. 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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值