0827-C02STL数据结构1
2024-08-27 11:46:30
发布于:江苏
8阅读
0回复
0点赞
1. 内存单位相关
#include <iostream>
#include <cstring>
using namespace std;
//int a[1005];
char a[1005];
int main(){
int n = 15;
// memset(a, -1, sizeof(a)); //ok
// memset(a, 1, sizeof(a)); //不ok
// memset(a, 0, sizeof(a)); //ok
// memset(a, 0x3f, sizeof(a)); //ok
// 00111111001111110011111100111111
memset(a, '@', sizeof a); //处理字符全部ok
for (int i=1; i<=n; i++){
cout << a[i] << ' ';
}
return 0;
}
#if 0
memset是按照内存大小进行初始化的.
bit: 比特(内存中最小单位), 位, 二进制位,
1 Byte = 8 bit
Byte: 字节(内存中常用单位, 基本单位)
KB: 1 KB = 1024 Byte
MB: 1 MB = 1024 KB
GB: 1 GB = 1024 MB
TB: 1 TB = 1024 GB
...
int: 4 Byte = 32 bit
0x表示 十六进制的前缀
3F
十六进制转二进制: 每一位十六进制都可以转换为4位二进制
八进制转二进制: 每一位八进制都可以转换为3位二进制
#endif
/*
*/
#include <bits/stdc++.h>
using namespace std;
int main(){
printf("%d\n", sizeof(short int)); //2 Byte
printf("%d\n", sizeof(int)); //4
printf("%d\n", sizeof(long long int)); //8
printf("%d\n", sizeof(float)); //4
printf("%d\n", sizeof(double)); //8
printf("%d\n", sizeof(char)); //1
printf("%d\n", sizeof(bool)); //1
// printf("%d\n", sizeof(string)); //STL
int n = 10;
cout << n << endl;
cout << (&n) << endl; //地址(十六进制)
// 指针(地址)类型
int *p = &n; //定义了一个int类型的指针, 用来存储n的地址
cout << p << endl;
cout << *p << endl; //取值符号
//指针类型的大小是根据编译器版本来确定的
printf("%d\n", sizeof(int *)); //
printf("%d\n", sizeof(char *)); //
printf("%d\n", sizeof(double *)); //
return 0;
}
2. function记忆化递归
//P1464 Function
#include <bits/stdc++.h>
using namespace std;
long long a, b, c, f[25][25][25];
long long func(long long x, long long y, long long z)
{
if (x<=0||y<=0||z<=0) return 1;
if (x>20||y>20||z>20) return func(20, 20, 20);
if (f[x][y][z]) return f[x][y][z];
if (x<y && y<z)
f[x][y][z] = func(x, y, z-1)+func(x, y-1, z-1)-func(x, y-1, z);
else
f[x][y][z] = func(x-1, y, z)+func(x-1, y-1, z)+func(x-1, y, z-1)-func(x-1, y-1, z-1);
return f[x][y][z];
}
int main()
{
while(cin >> a >> b >> c)
{
if (a==-1&&b==-1&&c==-1) break;
printf("w(%lld, %lld, %lld) = %lld\n", a, b, c, func(a, b, c));
}
return 0;
}
3.queue & priority_queue
/*
*/// O(n*log(n))
#include <bits/stdc++.h>
#include <queue>
using namespace std;
//priority_queue<int> q; //默认从大到小排序 (大根堆)
priority_queue<int, vector<int>, greater<int> > q; //从小到大 (小根堆)
int main(){
int n; cin >> n;
srand(time(NULL));
for (int i=1; i<=n; i++){
int t = rand()%100;
printf("%d ", t);
q.push(t);
}
puts("");
while (!q.empty()){
printf("%d ", q.top());
q.pop();
}
return 0;
}
#include <iostream>
#include <queue>
using namespace std;
int n,x,ans;
priority_queue<int,vector<int>,greater<int> >q;
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&x),q.push(x);
while(q.size()>=2)
{
int a=q.top();q.pop();
int b=q.top();q.pop();
ans+=a+b;
q.push(a+b);
}
printf("%d",ans);
return 0;
}
4. vector
/*
向量
动态数组 vector
*/
#include <bits/stdc++.h>
#include <vector>
using namespace std;
//vector<int> v(10, 0x3f3f3f3f);
vector<int> v;
int main(){
int n; cin >> n;
srand(time(0));
//输入: push_back
for(int i=1; i<=n; i++){
int t = rand()%100;
v.push_back(t);
}
//输出: 跟数组一样, 下标从0开始
//获取大小: v.size();
for (int i=0; i<v.size(); i++){
cout << v[i] << ' ';
}
cout << endl << v.size() << endl;
// sort(v.begin(), v.end()); //默认从小到大排序
sort(v.begin(), v.end(), greater<int>() ); //大到小
/*
greater<int>(), 比较器 从大到小
*/
for (int i=0; i<v.size(); i++){
cout << v[i] << ' ';
}
#if 0
v.resize(10) ; //重新分配空间, 值不会初始化
cout << v.size() << endl;
//获取大小: v.size();
for (int i=0; i<v.size(); i++){
cout << v[i] << ' ';
}
#endif
return 0;
}
这里空空如也
有帮助,赞一个