关于vector

又学到了一些似乎比较纸张的知识,蒟蒻终究是蒟蒻。

  • vector 删除元素

erase函数可以很好实现。

a.push_back(1);
a.push_back(2);
a.push_back(3);
a.push_back(4);
vector<int>::iterator it=a.begin();
while(it!=a.end()){
	if(*it==2)it=a.erase(it);
	else it++;
}
for(it=a.begin();it!=a.end();it++){
	printf("%d ",*it);
}

输出1 3 4

  • vetcor二分查找

#define defit vector<int>::iterator
for(int i=1;i<=6;i++)a.push_back(i*2);
defit l=a.begin();
defit r=a.end()-1;
defit mid;
while(l<r){
	mid=l+(r-l)/2;
	if(*mid<7)l=mid+1;
	else r=mid;
}
printf("%d",*l);

输出8

  • 综合一下

边二分边删除

#define defit vector<int>::iterator
for(int i=1;i<=6;i++)a.push_back(i*2);
defit l=a.begin();
defit r=a.end()-1;
defit mid;
while(l<r){
	mid=l+(r-l)/2;
	if(*mid<7)l=mid+1;
	else r=mid;
}
printf("%d ",*l);
a.erase(l);
l=a.begin(),r=a.end()-1;
while(l<r){
	mid=l+(r-l)/2;
	if(*mid<7)l=mid+1;
	else r=mid;
}
printf("%d",*l);

输出8 10

posted @ 2021-11-06 10:40  Feyn618  阅读(26)  评论(0编辑  收藏  举报