boost::stable_vector简单解析

由于vector底层实现的机制是一个动态数组,因此使用std::vector<T>时,如果海量数据量时,会导致vector底层的数组很大很大,这样就会导致database很快就会出现内存不足而导致系统停止运行或卡住,这时就要考虑是否用其他的容器替换vector了,参考了很多的资料,找到了一个boost::stable_vector可以替换std::vector,这样就可以避免修改大量的代码,提高效率(仔细想想其他的容器时,导致一些操作不支持:list不支持下标操作等等) 

需要加头文件:#include <boost/container/stable_vector.hpp>

typedef boost::container::stable_vector<T alloc> s_vec;

先看下boost::stable_vector的内部结构:

stable_vector

stable_vector中存放的元素都包含一个“Up”指针反馈到相关阵列中,这个up指针是实现稳定和随机读取的基础。vector底层实现的机制是一个list,list在分配内存时并不是连续的,指针阵列只需要在插入或删除时进行移位操作即可,后面的元素没必要移动,因此只是指针换来换去,并没有开辟内存空间。

如果此时的iterator在it.p位置,但是我呢想移动到该iterator后面的第k个位置,这时,我只需要进行如下操作即可:

it.p = *(it.p->up+k);

操作:boost::container::stable_vector与std::vector的操作一致,但是stable_vector的erase与insert是稳定安全的,不用指向下一个元素的iterator。

但是std::vector是序列式容器,需要返回指向下一个元素的iterator,如下:

for (auto it = v.begin(); it != v.end(); )
{
    if (6 == *it)
    {
        it = v.erase(it);
        // it = v.insert(33);
    }
    else
    {
        ++it;
    }
}

其他的操作与std::vector类似

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/463505.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PHP程序员面试中经常被提问的问题【转载】

1&#xff0e; Include 与 require的区别&#xff0c;require和require_once的效率哪个高&#xff1f; Php在遇到include时就解释一次&#xff0c;如果页面中出现10次include&#xff0c;php就解释10次&#xff0c;而php遇到require时只解释一次&#xff0c;即使页面出现多次re…

【转】英文论文中“such as, for example, e.g., i.e., etc., et al. ”的用法分析

http://hi.baidu.com/lovegenggeng/blog/item/5d5c594c240830fed72afcd0.html英文论文中“such as, for example, e.g., i.e., etc., et al. ”的用法分析 黄龙旺  龚汉忠 (上海交通大学学报编辑部, 200030,上海) 在英文论文的编辑加工中,常会遇到such as, for example, e. g…

理解zookeeper选举机制

转载&#xff1a;https://www.cnblogs.com/shuaiandjun/p/9383655.html 一、zookeeper集群 配置多个实例共同构成一个集群对外提供服务以达到水平扩展的目的&#xff0c;每个服务器上的数据是相同的&#xff0c;每一个服务器均可以对外提供读和写的服务&#xff0c;这点和red…

使用交互环境

使用交互环境许多脚本语言的解释器都提供了交互环境&#xff0c;我们可通过此环境与计算机沟通交流。为什么叫做交互环境&#xff1f;因为我们在这里通过编程语言与计算机沟通&#xff0c;让它做任何事情&#xff0c;它都会立刻照办并给予我们反馈。运行REBOL 解释器的方式很简…

[原创]K8 cping 3.0大型内网渗透扫描工具

[原创]K8 Cscan 大型内网渗透自定义扫描器 https://www.cnblogs.com/k8gege/p/10519321.html Cscan简介:何为自定义扫描器&#xff1f;其实也是插件化&#xff0c;但Cscan不需要编程同样可实现自定义功能&#xff0c;这比单纯插件化更容易实现插件功能Cscan旨在为用户提供一个高…

std::string的resize()与reserve()的区别

std::string的resize()与reserve()的区别: resize()&#xff1a;改变的是size()与capacity()的大小 (1)、比原来的变小之后&#xff0c;后面的会被截断 (2)、比原来的变大之后&#xff0c;后面的会被填充新的东西&#xff0c;不同的编译器可能会不同 reserve()&#xff1a;…

iMouse - 快速切换鼠标左右键

(此Blog是iMouse软件的官网)【名称】&#xff1a;iMouse【版本】&#xff1a;v1.2 (v1.2是首个公开发布版本&#xff0c;也是最新版&#xff0c;之前版本没有对外发布)【时间】&#xff1a;2012-01-06【关键词】&#xff1a;腱鞘炎、Swap、Mouse、切换、鼠标、鼠标手【功能】&a…

基本排序算法及分析(二):冒泡排序

冒泡排序和改进的冒泡排序 1/**//*------------------------------------------------------------------------------------------- 2Bubble_sort.h 3冒泡排序&#xff1a; 时间复杂度为O(N^2) 4改进的冒泡排序&#xff1a; 时间复杂度仍为O(N^2) 5 一般的冒泡排序方法有可…

洛谷负环板子题

洛谷负环板子题 差点没笑死我 之前的题解都在清一色diss bfs&#xff0c;吹爆dfs 如今改了数据bfs又崛起了&#xff0c;dfs回家种地了&#xff0c;哈哈哈哈哈 dfs版 1 // luogu-judger-enable-o22 #include<iostream>3 #include<cstdio>4 #include<queue>5 #…

std::vector中resize()和reserve()区别

在STL容器中vector用的还是比较多的&#xff0c;但是在使用时&#xff0c;会对resize()和reserve()的使用产生迷惑&#xff0c;现在就对这一情况做个对比&#xff1a; resize()&#xff1a;改变的是size()与capacity()的大小 (1)、比原来的变小之后&#xff0c;后面的会被截断…

设计师和开发人员更快完成工作需求的35个惊人的jquery插件教程(下)

jQuery是一个快速&#xff0c;简洁的工具&#xff0c;它可以遍历HTML文档&#xff0c;处理事件&#xff0c;执行动画&#xff0c;并添加AJAX。jQuery赋予web开发更多的选择机会&#xff0c;使网站产生令人难以置信的元素效果不像之前需要写下几十行代码实现相同的效果&#xff…

C#中一些格式的转换

1、DateTime 数字型 System.DateTime currentTimenew System.DateTime(); 1.1 取当前年月日时分秒 currentTimeSystem.DateTime.Now; 1.2 取当前年 int 年currentTime.Year; 1.3 取当前月 int 月currentTime.Month;1.4 取当前日 int 日currentTime.Day; 1.5 取当前时 int 时cu…

红黑树相关的信息

转载&#xff1a;https://www.cnblogs.com/wuchanming/p/4444961.html 红黑树相关的知识点&#xff0c;提高自己和面试应该用的到 1.stl中的set底层用的什么数据结构&#xff1f; 2.红黑树的数据结构怎么定义的&#xff1f; 3.红黑树有哪些性质&#xff1f; 4.红黑树的…

spring restTemplate使用方法

https://github.com/lenve/SimpleSpringCloud/tree/master/RestTemplate在Spring Cloud中服务的发现与消费一文中&#xff0c;当我们从服务消费端去调用服务提供者的服务的时候&#xff0c;使用了一个很好用的对象&#xff0c;叫做RestTemplate&#xff0c;当时我们只使用了Res…

打印菱形星号组合C程序

#include "stdio.h" #define N 9 //数组的行列数 int main(){char str[N][N]{0}; //例子,行列数应该是奇数int i,j;for(i0;i<N;i)for(j0;j<N;j)str[i][j] ;//先全部设为空格//在特定位置写入*号for(i0;i<N;i)for(j0;j<N;j){if(i0 || iN…

程序员的十层楼(11层)

第11层 上帝 看了上面的小标题&#xff0c;你可能会觉得奇怪&#xff0c;这篇文章不是讲“程序员的十层楼”吗&#xff1f;怎么冒出了第11层来了&#xff1f; 其实这并不矛盾&#xff0c;程序员确实只有十层楼&#xff0c;因为爬到第11层时&#xff0c;已经变成上帝&#xff0c…

函数局部变量和函数的参数在栈中的布局

#include <stdio.h> #include <iostream>using namespace std; void func(int p1, int p2, int p3) {int a p1;int b p2;int c p3;std::cout << "函数参数入栈顺序(栈在内存中向上伸长):从右到左" << std::endl;std::cout << &quo…

经验:Windows To Go准备工作

如果您准备使用USB设备带着您的移动Windows的话&#xff0c;您需要做好准备。从开发预览版到正式版&#xff0c;我也一直关注着Windows Go To这个新功能&#xff0c;所以&#xff0c;总结了些经验&#xff0c;分享给大家&#xff0c;希望能够帮助到大家&#xff0c;或者减少您的…

图表相同数据会自动合并问题(finereport)

finereport中&#xff0c;对于图表的操作&#xff0c;当遇到需要显示多个重复分类下的多个值时&#xff0c;由于自动合并相同数据&#xff0c;无法达到效果反复查询手册无果后&#xff0c;困扰好久&#xff0c;终想到了一个解决的办法&#xff1a;1、给查询的数据添加个列序号&…

简单的C语言程序合集

输出九九乘法表1 #include <stdio.h>2 int main()3 {4 int i,j;5 for(i1;i<9;)6 {7 for(j1;j<9;j)8 {9 if(i>j)10 {11 printf("%d*%d%d ",j,i,j*i);12 }13…