指向vector的指针

在公司用到一个奇怪的例子,就是vector里存放指针,指针指向一个vector,自己写了一个小demo,例子如下:
#include "iostream"
#include "algorithm"
#include "vector"
#include "memory"
#include "ctime"
using namespace std;

struct Ipvseg
{
	Ipvseg(int i, int j) :start(i), end(j){}
	int start;
	int end;
};

bool InSegment(int ip, Ipvseg segment)
{
	return ip >= segment.start&&ip <= segment.end;
}


struct Advwhite
{
	Advwhite(vector<Ipvseg> Ipvsegs, vector<int> advids) :Ipvsegs_(Ipvsegs), advids_(advids){}
	vector<Ipvseg> Ipvsegs_;
	vector<int> advids_;
};

void query(int ip, vector<Advwhite>& advs, vector<vector<int>*> &result){
	for (auto iter = advs.begin(); iter != advs.end(); ++iter) //iterΪAdvwhite
	{
		int left = 0;
		int right = iter->Ipvsegs_.size()-1;
		int flag = false;
		while (left <= right){
			int middle = (left + right) / 2;
			if (InSegment(ip, iter->Ipvsegs_[middle])){
				flag = true;
				break;
			}
			if (ip < iter->Ipvsegs_[middle].start){
				right = middle - 1;
			}
			else{
				left = middle + 1;
			}
		}
		if (flag){  
			result.push_back(&(iter->advids_));   
		}
	}
}

int main(){
	// clock_t start,end;
	// start=clock();
	Ipvseg ip1(3, 5);
	Ipvseg ip2(8, 10);
	Ipvseg ip3(15, 17);
	Ipvseg ip4(21, 23);
	Ipvseg ip5(25, 28);
	Ipvseg ip6(30, 32);
	vector<Ipvseg> Ipvsegs1 = { ip1, ip2, ip3 };
	vector<Ipvseg> Ipvsegs2 = { ip4, ip5, ip6 };
	vector<int> advids1 = { 132, 432, 543, 654, 765, 867 };
	vector<int> advids2 = { 134, 435, 546, 65, 767, 863 };
	Advwhite adw1(Ipvsegs1, advids1);
	Advwhite adw2(Ipvsegs2, advids2);
	vector<Advwhite> Advs = { adw1, adw2 };
	vector<vector<int>*> result;
	//vector<shared_ptr<vector<int>>> result;
	query(30,Advs,result);
	for (auto i : result)
	{
	 	for(auto j:(*i))
	 	{
	 		cout<<j<<"  ";
	 	}
	 	cout<<endl;
	}
	// end=clock();
	// double total=(double)((double)(end-start)/CLOCKS_PER_SEC);
	// cout<<total<<endl;
}

后来把普通指针又换成了shared_ptr,用法相同。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值