指向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,用法相同。
指向vector的指针相关推荐
- 【 C 】指向数组的指针(数组指针)(行指针)
本博文内容参考:<C 和 指针> 本博文解决两个问题,一是如何访问二维数组的行,以及元素:二是如何定义指向数组的指针以及如何赋值等. 很简单,快速记录! 先给出一个案例,判断下面这两个声明 ...
- error C3867:非标准语法;请使用“”来创建指向成员的指针
C++实战宝典 上一篇链接: C++使用vector容器遍历时迭代器失效问题 文章目录 一.问题描述 二.原因分析 三.解决方案 四.总结 新壁纸 一.问题描述 类成员函数作为函数参数出现error ...
- C++声明指向数组的指针
一.问题 下面这些声明合法吗? int vector[10], *vp = vector;int matrix[3][10], *mp=matrix, 二.答案 第1个声明是合法的.它为一个整型数组分 ...
- c++类对象的例子(非标准语法;请使用 ““ 来创建指向成员的指针,如何解决?)
非标准语法:请使用 "&" 来创建指向成员的指针,如何解决? 在main.cpp中有问题 Game.cpp......#include "Game.h" ...
- C指针4:数组指针(指向数组的指针)
先明确两个概念:(1和2是两个完全不一样的东西) 1.数组指针:如果一个指针指向了数组(该数组就是普通定义的数组),我们就称它为数组指针(Array Pointer).(1强调的是指针) 2.指针数组 ...
- 常量指针与指向常量的指针
这两个概念经常很容易混淆,下面简单分析一下 1.常量指针: int * const p : const p 就是一个常量,然后再看*,可以看出是一个常量类型的指针,即int类型的常量指针.不能修改 ...
- [C++] 指向常量的指针 VS 指针类型的常量
指向常量的指针 VS 指针类型的常量 const 修饰指针时的位置不同,作用也不相同. 1. 指向常量的指针 不能通过指向常量的指针改变所指对象的值,但指针本身可以改变,可以指向另外的对象. 例: i ...
- C++基础之指向成员的指针
C++中指向成员的指针 一个类有两种基本的成员:函数成员和数据成员.同样的,指向成员的指针也有两种:指向函数成员的指针和指向数据成员的指针.后则其实并不常用,因为类一般是不含有公共数据成员的,仅当用在 ...
- 20返回指针的函数与指向函数的指针
一.返回指针的函数 指针也是C语言中的一种数据类型,因此一个函数的返回值肯定可以是指针类型的. 返回指针的函数的一般形式为:类型名 * 函数名(参数列表) 比如下面这个函数,返回一个指向char类型变 ...
最新文章
- Opencv 完美配置攻略 2014 (Win8.1 + Opencv 2.4.8 + VS 2013)下
- JMS学习(1):MS基本概念
- 两张趣图助你理解状态码的含义~
- 前端学习(1264):fetch响应结果
- Google File System 学习笔记
- 区块链学者Michael Goldstein:比特币可以防止能源浪费
- git stash暂存命令
- 他山之石 可以攻玉-《海量数据库解决方案I》
- 如何设置mysql数据库连接池的大小
- carry函数在C语言中用法,carry的用法总结大全
- int content=Integer.parseInt(jtf.getText().trim());
- Mex HDU - 4747(dp)
- RS码FEC机制的实现方法(基于Luigi Rizzo的代码)
- 参考文献中英文人名_参考文献英文人名的缩写规则
- 那些年,我们走过的Github坑
- 西安交通大学计算机博士名单,2017年西安交通大学博士生拟录取名单公示
- 二叉树的中序遍历 [递归 迭代]
- 前端常见图片格式整理
- SQL server in 用法
- 安卓仿手机网易新闻app项目开发系列之(二)轮播图显示和RecyclerView适配器编写