C++
记录C++学习中的内容点
JIngles123
生命不息,奋斗不止
展开
-
resize()和reserve()比较,及使用resize初始化一维vector和二维vector
首先,我们要明确在这里比较一下两个常见又相似,容易让人混淆的两个函数,一个是resize()函数,另一个是reserve()函数。比较:resize():改变vector中元素的数目,使用这个函数之后,就已经分配它的内存大小。reserve():设置这个vector的容量大小,和resize()的区别在于,使用这个函数之后,此时还并没有真正分配内存。用法区别:resize():有两种用法,第一种,只传一个参数,即给定容器大小,此时默认初始值为0;第二种,传递两个参数,第一个是容器大小,第二个是初始原创 2022-05-13 22:16:24 · 1113 阅读 · 0 评论 -
Line 5: Char 40: error: call to implicitly-deleted default constructor of ‘unordered_map<vector<int>
今天继续每日做力扣的日子,这一题在写的时候,因为以前没尝试过这样的写法,所以先写了一点就执行,看他有没有报错,果然,报错了,如题所示后来想了下,明白了,这是和unordered_map的底层实现有关的,相信稍微了解一点c++的都明白unordered_map和map的区别,一个是无序的,一个是有序的。而关键在这里,unordered_map的底层实现是哈希表,哈希表需要通过计算得到对应的键值,而在C++中,这种复杂结构的变量,没有放进去。map的底层实现是红黑树,红黑树是个挺高大上的东西,目前只了解个原创 2022-04-12 23:34:51 · 1626 阅读 · 0 评论 -
常见的5种排序算法代码的C++实现
1、冒泡排序平均时间复杂度:O(n^2)最差时间复杂度:O(n^2)空间复杂度:O(1)是否稳定:是原理:它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。// 当数列本身有序,只需要扫描一遍即可void BubbleSortFlag(vector<int>& vec) { for (int i原创 2022-02-02 16:35:17 · 1135 阅读 · 0 评论 -
C数组指针的表示中,()、[]、*的优先级
数组名的指针操作:int a[3][4]; int (*p)[4]; //该语句是定义一个数组指针,指向含4个元素的一维数组p = a; //将该二维数组的首地址赋给p,也就是a[0]或&a[0][0]p++; //该语句执行过后,也就是p=p+1;p跨过行a[0][]指向了行a[1][] //所以数组指针也称指向一维数组的指针,亦称行指针。访问数组中第i行j列的一个元素,有几种操作方式:*(p[i]+j)、*(*(p+i原创 2022-01-30 17:33:53 · 1329 阅读 · 0 评论 -
C++实现创建、打印、释放链表
1、通过数组创建一个链表ListNode* createLinkedList(int arr[],int n){ if(n==0) return NULL; ListNode* head=new ListNode(arr[0]); ListNode* curNode=head; for(int i=1;i<n;i++){ curNode->next=new ListNode(arr[i]); curNode=curNode->next; } return hea原创 2021-06-07 17:20:12 · 1000 阅读 · 0 评论 -
使用三路快排的思路解决一个数组排序问题(C++)
问题描述:给定一个有n个元素的数组,数组中元素的取值只有0,1,2三种可能。为这个数组排序。class Solution{public: //时间复杂度:O(n) //空间复杂度:O(1) //遍历一遍 void sort(vector<int>& nums){ int zero=-1; // nums[0...zero] == 0 int two=nums.size(); //nums[two...n-1] == 2 for(int i=0;i<tw原创 2021-05-04 20:48:13 · 79 阅读 · 0 评论 -
二分查找法
想使用二分查找法,前提是这个数列需要是有序的template<typename T>int binarySearch(T arr[],int n, T target){ int l=0,r=n-1;// 在[l ... r]的范围里寻找target while(l<=r){// 当l==r时,区间[l ... r]依旧是有效的 int mid=(l+r)/2;//为了防止整型溢出 // 可以改成 int mid=l+(r-1)/2; 有效防止溢出 if(arr[mid]原创 2021-05-03 21:04:14 · 68 阅读 · 0 评论