C/C++随手记
(c风格)输出格式化
%d:读入一个 32位有符号整数。
%u:读入一个 32 位无符号整数。
%lld:读入一个 64 位有符号整数。
%llu:读入一个 64 位无符号整数。
%f:读入一个 float 类型。
%lf:读入一个 double 类型。
(c风格)字符串处理
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| #include <cctype>
isalpha():检查这个字符是否为字母,真返回1,假返回0;
isalnum():检查这个字符是否为字母或数字数字,同上;
isdigit():检查这个字符是否为十进制数字,同上;
islower():检查这个字符是否为小写字母,同上;
char *strchr(const char *s, int c); char *strrchr(const char *s, intc);
char *strstr(const char *str1, const char *str2);
char *strpbrk(const char *s1, const char *s2);
size_t strspn(const char *s,const char *accept); size_t strcspn(const char *s,cosnt char *reject);
|
(c风格)字符长度
1 2
| #include <string.h> size_t strlen( char *str );
|
(c风格)字符串格式化
1 2
| #include <stdio.h> int sscanf( const char *buffer, const char *format, ... );
|
(c风格)获取单行字符串
(c风格)malloc(分配未初始化的内存
静态对象的分配与释放由编译器自动处理;动态对象的分配与释放必须由程序员显式地管理,它通过malloc()和free两个函数(C++中为new和delete运算符)来完成。
1 2 3 4 5
| char *p1; p1 = (char *)malloc(10); p1 = (char *)malloc(10*sizeof(int)); free(p1);
|
(c风格)calloc(分配初始化了的内存
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| #include <stdio.h> #include <stdlib.h> int main() { int i, n; int *a; printf("要输入的元素个数:"); scanf("%d",&n); a = (int*)calloc(n, sizeof(int)); printf("输入 %d 个数字:\n",n); for( i=0 ; i < n ; i++ ) { scanf("%d",&a[i]); } printf("输入的数字为:"); for( i=0 ; i < n ; i++ ) { printf("%d ",a[i]); } free (a); return(0); }
|
(c风格)定义结构体
1 2 3 4 5 6
| typedef struct Node *PtrToNode; struct Node { ElementType Data; PtrToNode Next; }; typedef PtrToNode List;
|
(c++风格)输入输出
关闭输入输出提高性能
1 2 3
| ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
|
输出保留6位小数
1
| cout<<fixed<<setprecision(6)<<l;
|
(C++风格读取单行字符串)
1 2
| #include<string> getline(cin,b1);
|
(c++风格)半自动初始化内存
1 2 3
| string *s = new string("Liu Zhang Hao");
delete s ;
|
(c++风格)结构体
c++的结构体可以实现类的所有功能,除了访问权限。可以包含成员函数,可以继承,可以实现多态!!但是我个人不建议使用
(c++风格)访问控制和继承
| 访问 |
public |
protected |
private |
| 同一个类 |
yes |
yes |
yes |
| 派生类 |
yes |
yes |
no |
| 外部的类 |
yes |
no |
no |
一个派生类继承了所有的基类方法,但下列情况除外:
- 基类的构造函数、析构函数和拷贝构造函数。
- 基类的重载运算符。
- 基类的友元函数。
(C++STL库)algorithm库
lower_bound
reverse翻转数据
1
| reverse(cstr.begin(),cstr.end());
|
swap交换数据
unique去除数组中相邻重复项
返回取重结束后的尾迭代器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| #include <iostream> #include <algorithm> using namespace std; int main() { string str; cout << (str = "hello word") << endl; cout << "str_len = " << str.size() << endl; string::iterator it = str.begin(); string::iterator end = unique(str.begin(), str.end()); cout << str << endl; for(;it<end;it++)cout << *it ; return 0; }
|
(C++STL库)vector
(1)vector容器和数组非常相似,也称为单端数组。
(2)vector与普通数组区别:不同之处在于数组是静态空间,而vector可以动态扩展。 动态扩展并不是在原空间之后续接新空间,而是找更大的内存空间,然后将原数据拷贝新空间,释放原空间。
(3)vector容器的迭代器是支持随机访问的迭代器。
原文链接:https://blog.csdn.net/WL0616/article/details/123165852
vector常用的操作函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| 1. vector<T> v; 2. vector(v.begin(), v,end()); 3. vector(n, elem); 4. vector(const vector &vec); 5. vector& operator=(const vector &vec); 6. assign(begin,end); 7. assign(n,elem); 8. empy(); 9. capacity(); 10. size(); 11. resize(int num); 12. resize(int num, elem); 13. push_back(ele); 14. pop_back(); 15. insert(const_iterator pos, ele); 16. insert(const_iterator pos, int count ele); 17. erase(const_iterator pos); 18. erase(cons_titerator start, const_iterator end); 19. clear(); 20. at(int idx); 21. operator[]; 22. front(); 23. back(); 24. swap(vec); 25. reserve(int len);
|
构造函数
1 2 3 4
| 1. vector<T> v; 2. vector(v.begin(), v,end()); 3. vector(n, elem); 4. vector(const vector &vec);
|
遍历
删除
STL二分查找
头文件
1 2
| lower_bound(first,last,value)
|
指向首个不小于 value 的元素的迭代器,或若找不到这种元素则为 last 。
1 2
| upper_bound(first,last,value);
|
指向首个大于 value 的元素的迭代器,或若找不到这种元素则为 last 。
感谢鼓励