0.概述
这篇文章旨在记录我真实经历过的一些值得反思的错误,可能是自己犯的错误,也可能是其他人犯的错误。但是都是一些值得反思的问题,文章结构可能会比较乱,以后记录的问题多了肯定会再进行梳理。
1.vector size为0
在做"求TopK"算法问题时,遇到结果错误问题。经过调试发现那个长度为K的大顶堆vector
int findKthSmallest(vector<int>& nums, int k)
{
vector<int>heapVec;
int res=0;
if(k<=0 || nums.size()<=0)
return -1;
heapVec.reserve(k+1);
for(int i=0;i<k;++i)
{
heapVec[i+1]=nums[i]; //低级错误
}
cout<<"heapVec size="<<heapVec.size()<<endl;//heapVec size=0;
//后续操作......
return res;
}
int main()
{
vector<int>testVec={1,2,3,4};
findKthSmallest(testVec,2);
}
异常情况是heapVec.size()返回0.
原因分析:
heapVec.reserve(k+1);//只改变了heapVec的容量,capacity()返回k+1.但是不改变heapVec的size,size还是0。
heapVec[i+1]=nums[i];//其实经过reserve后,已经申请了内存。但是heapVec的size为0,执行后还是为0.
解决方法:
改用push_back
heapVec.push_back(nums[i]);
深入分析:
如果对一个空vector的元素赋值,运行直接段错误
vector<int>testVec;
testVec[0]=1;//segmentation fault (core dumped)
源码分析(待补充):
标签:总结,错误,nums,int,heapVec,vector,反思,size From: https://www.cnblogs.com/madadam/p/18416313