1 数组基础
1.1数组初始化:
特点:数组是连续的地址,并且他的下标从0开始
1.1.1 数组定义及其初始化
int arr[5]; //只定义
int arr[4][5];
int arr[5] = {0}; //定义空数组: 数组元素均为0
int arr[] = {1,2,3,4,5,6}; // 完全初始化--可不定义有多好啊列
int arr[5] = {1,2,3,4,5,6};
int arr[5] = {1,2,3}; //不完全初始化,数组的其他元素为0
char charh[5] = {'1','2', 98, 97}; //整形会根据ASCII转化为字符
注意:程序中的动态分配数组内存
//模板定义
template<typename T, size_t N>
using ptr = T[];
//变量申请
int* ptr = new int(2);
//一维数组
int * ptr = new int[a.size()];
//二维数组
int** edge = new int* [b.size()];
for (int k = 0; k < b.size(); ++k)
{
edge[k] = new int[b.size()];
memset(edge[k], 0, sizeof(int) * b.size());
}
参考链接:
数组的定义
表达式必须含有常量值
二分查找
int searchTwo(vector<int>nums, int tar) {
int l = 0, r = nums.size() - 1; //左闭右闭
while (l <= r) {
int mid = l - ((l - r) / 2);
if (nums[mid] > tar) {
r = mid - 1;
}
else if (nums[mid] < tar) {
l = mid + 1;
}
else {
return mid;
}
}
return -1;
}
注意:
本文采用左闭右闭
移除元素,原地移除指定的元素
双指针
int removeS(vector<int>& nums, int tar) {
int slow = 0; //定义slow指针
for (int fast = 0; fast < nums.size(); fast++) {
if (tar != nums[fast]) {
//非指定元素时,slow下标的元素= fast下标的元素,并加1
nums[slow++] = nums[fast];
}
}
return slow;
}