社区
C++ 语言
帖子详情
如何使用vector来进行一次大批量的push_back?
thelONE328
2005-10-15 04:49:00
我在做一个小项目,碰到一个问题,文件需要分解成多个std::vector<char>在网上传输,不过在把文件分割放入std::vector<char>的过程中对每一个char调用一次push_back,这在大文件传输的时候简直是一个噩梦! 不知道有没有人有好的办法?谢谢了!
...全文
2711
16
打赏
收藏
如何使用vector来进行一次大批量的push_back?
我在做一个小项目,碰到一个问题,文件需要分解成多个std::vector在网上传输,不过在把文件分割放入std::vector的过程中对每一个char调用一次push_back,这在大文件传输的时候简直是一个噩梦! 不知道有没有人有好的办法?谢谢了!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
16 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Dev
2005-10-16
打赏
举报
回复
然后调用resize的时候是不是要调用这些对象的默认构造函数?会不会也要影响效率?
=======================================================
对基本类型是没问题。对自定义类型来说,肯定是要调用默认构造函数的。除非你继承重写这个函数。
但是我认为你的自定义类型会那么频繁的调用吗,如果像vector<char>这种情形我还是可以理解,
如果你的自定义类型也这么频繁调用,你不如把缓冲区放入自定义类型,或者你应该考虑是否改一下设计。
^_^
K
2005-10-16
打赏
举报
回复
reserve
codearts
2005-10-16
打赏
举报
回复
>回复人: yingle2000(音乐天堂) ( ) 信誉:100 2005-10-15 23:12:00 得分: 0
>
> 传输大文件的时候只能一块一块传输,一起传输的思路本身就有问题,内存也会被大量消耗。
>一块一块传输用char[]固定长度就可以了,效率最高。
同意
useresu
2005-10-15
打赏
举报
回复
reserve
yingle2000
2005-10-15
打赏
举报
回复
传输大文件的时候只能一块一块传输,一起传输的思路本身就有问题,内存也会被大量消耗。
一块一块传输用char[]固定长度就可以了,效率最高。
thelONE328
2005-10-15
打赏
举报
回复
如果放string就不能放其他的字符了,比如'\0'
——谁告诉你的?
===============================================
在我传递一个二进制文件的时候如果中间有一大段'\0',然后我把这些内容放入到一个string中去的话,接受方应该不能正确的获得这个字符串的长度吧(我没有仔细查过string的实现方式,不过按常识应该是计算开头到第一个'\0'的距离吧)
thelONE328
2005-10-15
打赏
举报
回复
用 resize (),那么vector 对象就知道自己的状态了,copy进去也可以了!
========================================================================
好的,我想这样就太好了。不过如果我的vector里面放了一个自定义的类型,然后调用resize的时候是不是要调用这些对象的默认构造函数?会不会也要影响效率?
fangrk
2005-10-15
打赏
举报
回复
如果放string就不能放其他的字符了,比如'\0'
——谁告诉你的?
step_by_step
2005-10-15
打赏
举报
回复
先调用reverse(),然后再直接把vector<char>当做一维的数组就ok了。
yhbttfile
2005-10-15
打赏
举报
回复
STL有规定string不能放特殊字符吗?
Dev
2005-10-15
打赏
举报
回复
"这种做法没有改变vector对象的状态,vector并不知道自己现在把持了多少对象"
=======================================================
用 resize (),那么vector 对象就知道自己的状态了,copy进去也可以了!
^_^
thelONE328
2005-10-15
打赏
举报
回复
不知道这样行不行,因为要把一个大文件分解为多个小部分,每个部分有固定的大小并用一个vector来承载。可以先做一个vector,然后让它reserve需要的内存空间,在里面填充满字符。然后每次调用它的拷贝构造函数来生成一个新的vector,调用memcpy把需要的内存拷贝到这个vector的内存中去。虽然这个方法还是很莽撞,并且不能保证拷贝构造函数不会慢,不过似乎是有一点希望吧
thelONE328
2005-10-15
打赏
举报
回复
“那就存个结构体,里面放char 数组”
非常感谢~~ 不过这样没有本质上的变化!大家知道vector实际上是一个在物理上连续的内存空间组成的数组, 我觉得比较好的办法是先调用std::vector<T>::reserve()方法来预留一块足够的空间,然后再从vector第一个元素的地址处通过memcpy方法把需要的内存拷贝进去,这样做最大的缺点是这种做法没有改变vector对象的状态,vector并不知道自己现在把持了多少对象,呵呵,真的不知道该怎么办了
oyljerry
2005-10-15
打赏
举报
回复
那就存个结构体
里面放char 数组
thelONE328
2005-10-15
打赏
举报
回复
如果放string就不能放其他的字符了,比如'\0'
力为
2005-10-15
打赏
举报
回复
用string不可以么?
【C++】
vector
的迭代器
使用
中出现的程序中断
目的: STL在很久以前就在
使用
了,当时记得是做一个基于OPENCV图像处理库,主要由C++编写的小游戏,STL用于处理游戏中的角色的死亡和添加、遍历,在那款游戏的设计中,STL并没有涉及到很细致的部分,但在最近
进行
一个需要
大批量
地
使用
STL的时候出现了很多的错误,重新细致地翻阅了c++Primer 之后,现在将错误
进行
总结并说明为何出错和如何改正。 随机访问容器如
vector
和list,在迭
C++学习记录(8)list
一次
是对const对象即使不用const迭代器应该也可以,因为按照我的推理,其实最根本的结点的属性没有被保护;另
一次
就是对const成员为什么非得用const成员函数产生疑问。总得就是以C的角度对const关键字
进行
理解,而不是C++,上面我们已经看到了,C++的const从深度上将一系列与const修饰的对象能够产生关系的所有属性
进行
const修饰;从广度上直接禁止非const引用/指针与const对象产生关系。
C++文件读写以及
vector
的遍历
写一个文本,然后编写一个程序,打开文本然后将每一个字读取到一个
vector
对象中。遍历
vector
,将内容显示到cout。然后利用泛型算法sort(),对文字
进行
排序。 #include <algorithm> sort(container.begin(), contaner.end()) 再将排序后的结果输出。 #include <iostream> #include <fstream> //读取文件的头文件 #include <
vector
> #inc
从零实现 C++
vector
:原理、实现与优化
本文通过模拟实现的方式,从构造、容量管理、访问、修改等多个维度,逐步揭示了
vector
的内部结构与核心机制。
vector
是一个既简单又强大的容器,掌握它不仅能帮助我们更高效地开发程序,也为理解 C++ 更复杂的数据结构打下坚实基础。
关于
vector
的排序
vector
<shared_ptr<IBslBuildingStorey>> buildStoreys; //按楼层排序 -----------方法1 map<double, shared_ptr<IBslBuildingStorey>> MapStoreys; for (auto &istorey : buildStoreys) ...
C++ 语言
65,210
社区成员
250,518
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章