在公司用到一个奇怪的例子,就是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的指针相关推荐

  1. 【 C 】指向数组的指针(数组指针)(行指针)

    本博文内容参考:<C 和 指针> 本博文解决两个问题,一是如何访问二维数组的行,以及元素:二是如何定义指向数组的指针以及如何赋值等. 很简单,快速记录! 先给出一个案例,判断下面这两个声明 ...

  2. error C3867:非标准语法;请使用“”来创建指向成员的指针

    C++实战宝典 上一篇链接: C++使用vector容器遍历时迭代器失效问题 文章目录 一.问题描述 二.原因分析 三.解决方案 四.总结 新壁纸 一.问题描述 类成员函数作为函数参数出现error ...

  3. C++声明指向数组的指针

    一.问题 下面这些声明合法吗? int vector[10], *vp = vector;int matrix[3][10], *mp=matrix, 二.答案 第1个声明是合法的.它为一个整型数组分 ...

  4. c++类对象的例子(非标准语法;请使用 ““ 来创建指向成员的指针,如何解决?)

    非标准语法:请使用 "&" 来创建指向成员的指针,如何解决? 在main.cpp中有问题 Game.cpp......#include "Game.h" ...

  5. C指针4:数组指针(指向数组的指针)

    先明确两个概念:(1和2是两个完全不一样的东西) 1.数组指针:如果一个指针指向了数组(该数组就是普通定义的数组),我们就称它为数组指针(Array Pointer).(1强调的是指针) 2.指针数组 ...

  6. 常量指针与指向常量的指针

    这两个概念经常很容易混淆,下面简单分析一下 1.常量指针: int * const p   : const p 就是一个常量,然后再看*,可以看出是一个常量类型的指针,即int类型的常量指针.不能修改 ...

  7. [C++] 指向常量的指针 VS 指针类型的常量

    指向常量的指针 VS 指针类型的常量 const 修饰指针时的位置不同,作用也不相同. 1. 指向常量的指针 不能通过指向常量的指针改变所指对象的值,但指针本身可以改变,可以指向另外的对象. 例: i ...

  8. C++基础之指向成员的指针

    C++中指向成员的指针 一个类有两种基本的成员:函数成员和数据成员.同样的,指向成员的指针也有两种:指向函数成员的指针和指向数据成员的指针.后则其实并不常用,因为类一般是不含有公共数据成员的,仅当用在 ...

  9. 20返回指针的函数与指向函数的指针

    一.返回指针的函数 指针也是C语言中的一种数据类型,因此一个函数的返回值肯定可以是指针类型的. 返回指针的函数的一般形式为:类型名 * 函数名(参数列表) 比如下面这个函数,返回一个指向char类型变 ...

最新文章

  1. Opencv 完美配置攻略 2014 (Win8.1 + Opencv 2.4.8 + VS 2013)下
  2. JMS学习(1):MS基本概念
  3. 两张趣图助你理解状态码的含义~
  4. 前端学习(1264):fetch响应结果
  5. Google File System 学习笔记
  6. 区块链学者Michael Goldstein:比特币可以防止能源浪费
  7. git stash暂存命令
  8. 他山之石 可以攻玉-《海量数据库解决方案I》
  9. 如何设置mysql数据库连接池的大小
  10. carry函数在C语言中用法,carry的用法总结大全
  11. int content=Integer.parseInt(jtf.getText().trim());
  12. Mex HDU - 4747(dp)
  13. RS码FEC机制的实现方法(基于Luigi Rizzo的代码)
  14. 参考文献中英文人名_参考文献英文人名的缩写规则
  15. 那些年,我们走过的Github坑
  16. 西安交通大学计算机博士名单,2017年西安交通大学博士生拟录取名单公示
  17. 二叉树的中序遍历 [递归 迭代]
  18. 前端常见图片格式整理
  19. SQL server in 用法
  20. 安卓仿手机网易新闻app项目开发系列之(二)轮播图显示和RecyclerView适配器编写

热门文章

  1. 算法笔记【1】 Kruskal - 克鲁斯卡尔算法
  2. N个人都不坐自己位置的情况有几种
  3. html中如何写div中div的位置,position设置div的位置
  4. C语言模拟银行排队叫号(顺序队)
  5. 比你拼命的人多的是,最可怕的是比你牛的人比你还拼命(每天看一段一个月刚刚好)
  6. python自动发送邮件不需要发件邮箱_python 自动发送邮件
  7. 互联网采集-互联网采集软件-互联网采集数据信息采集工具免费
  8. Oracle性能优化概述
  9. jQuery动画练习
  10. b500k带开关电位器内部构造_b500k开关摇杆电位器,直滑电位器103