一、数据类型
空 NULL
1.数字 int 整型;float 浮点型;double 双浮点型 单位字节数分别为4、4、8
2.字符 char a = 'a' 单引号 单位字节数为1
3.布尔型 bool x = true/false 输出1/0
4.指针 其值为所表示变量的地址 int *p = &a 单位字节数为4
5.结构体 struct 可以包含函数,默认为public
#定义 typedef struct { int x; char name[20]; char *type; }Point; #两类访问方式 Point point; point.x = 10; Point *p; p->x = 15;
二、数据结构
“所有的容器归根到底都是内存空间的排列方式和在空间上施加各种各种不同的限制所得的”
1.数组array 内存空间为连续的一段地址,无法动态改变大小
a.初始化
int a[5] = {0};
char b[3] = {'a','b','c'};
int a[2][3]={{1,2,3}{4,5,6}};
b.遍历
for(int i =0;i<a.size()\length();i++){ cout << a[i] << endl; }
2.string 字符串,动态长度
a.初始化
string a = "abc";
b.遍历
for(int i =0;i<a.size()\length();i++){ cout << a[i] << endl; }
c.功能
增 a.append("def");
删 a.erase(1,3); 删除索引1-3的子串
插 a.insert(2,"gg")
查 a.find('c'\"bc") 返回开始位置索引
替换 a.replace(1,3,"gg") 替换索引1-3的子串为“gg”
交换 a.swap(b) 字符串a和b交换
3.vector 动态长度,顺序存储
a. 初始化
#include <vector>
vector<int> a = {1,2,3};
vector<int> b (3,1); 3个1
b.遍历
#for循环 for(int i =0;i<a.size();i++){ cout << a[i] << ";"; } #for-each for(auto i : a){ cout << i << ";"; }
c.功能
尾部插入 a.push_back(5);
尾部删除 a.pop_back();
查找索引位置元素 a.at(index)
为空 a.empty()
交换数据 a.swap(b)
4.链表 动态长度,插入删除数据较向量具有优势
a.定义与初始化
#定义 struct ListNode { double value; ListNode *next; }; #初始化头指针 ListNode *head = new ListNode; head->value = 1; head->next = nullptr; #带构造函数的定义 struct ListNode { double value; ListNode *next; ListNode(double valuel, ListNode *nextl = nullptr) { value = value1; next = next1; } }; #初始化 ListNode *second_node = new ListNode(2); ListNode *head = new ListNode(1, second_node );
2.遍历
ListNode *ptr = head; while (ptr != nullptr) { cout << ptr->value << ";"; ptr = ptr->next; }
5.栈 动态,先进后出
a.初始化
#include<stack>
stack<int> a;
b.遍历
while(!a.empty()){ a.top(); a.pop(); }
c.操作
入栈 a.push(1);
出栈 a.pop();
查看栈顶元素 a.top();
元素个数 a.size();
为空 a.empty();
6.队列 动态,先进先出
a.初始化
#include<queue>
queue<int> a;
b.操作
压入队列尾部 a.push(1);
删除队首元素 a.pop();
查看队首元素 a.front();
查看队尾元素 a.back();
元素个数 a.size();
为空 a.empty();
三.常用方法
1.strlen vs sizeof
#include <cstring> strlen的参数只能是char*,且必须是以‘\0‘结尾的。运行时才开始计算结果,反映的是字符数组当前到‘\0‘为止的动态长度
sizeof不能计算动态分配空间的大小,编译时就计算结果,反映的是该数据类型所占空间的字节数