社区
C++ 语言
帖子详情
vector的push_back一次能压多大的数据?
jiangzy80
2008-12-24 01:00:02
我现在定义的一个结构,大小在50K左右,我使用vector.push_back()的时候就出错。而其它地方我同样采用这个方法来压数据都可以,当然其它地方的结构体没这么大?
...全文
862
57
打赏
收藏
vector的push_back一次能压多大的数据?
我现在定义的一个结构,大小在50K左右,我使用vector.push_back()的时候就出错。而其它地方我同样采用这个方法来压数据都可以,当然其它地方的结构体没这么大?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
57 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
NIL_ZJW
2010-12-28
打赏
举报
回复
哎!!问题解决,以下是我的数据存储方法
struct DATANUMBERLINE
{
string str[3205];
};
typedef vector<DATANUMBERLINE> DataNumberLine;
char *buf;
buf=(char*)malloc(Line*sizeof(char)); // buf用来存放读进来的字符串
while(1)
{
memset(buf,0,Line*sizeof(char));
p=readdata(fp, buf);//每次调用文件指针fp会自动后移一行 readdata是一个函数
if(!p)//文件读取结束则跳出循环
break;
datanumberline.str[i] = buf;
i++;
}
NIL_ZJW
2010-12-28
打赏
举报
回复
顶起,遇到了同样的问题,希望给个清晰的解决方案,能有简单的代码实现示例更好..
等待 并关注中
jiangzy80
2009-01-15
打赏
举报
回复
[Quote=引用 54 楼 imafish_i 的回复:]
引用 33 楼 jiangzy80 的回复:
#define MsndSTheaters std::vector <MsndSTheater *>
MsndSMovies m_mDataMovie
在函数中定义一个MsndSTheater,赋值后采用MsndSTheaters.push_back(mDataMovie)就出错哈。改成静态数组或这压指针就正常了。
1. #define 的是 <MsndSTheater *>的vector,压mDataMovie当然会出错了啊。
2. 如果不是这个错误,
{
MsndSMovies m_mDataMovie; //1
MsndSTheater mDataMov…
[/Quote]
我跟了的,就是在MsndSTheaters.push_back(mDataMovie);时出错。
jiangzy80
2009-01-13
打赏
举报
回复
[Quote=引用 51 楼 imafish_i 的回复:]
vector带有异常机制吧,try{}一下试试看看是什么异常。
会不会是达到了.capacity()调整vector大小时候出现的异常?这个时候需要双份的内存
或者试试先new出一段连续空间,压placement new出来的指针,这样就应该没有碎片了吧
[/Quote]
它是在第一次调用push_back()的时候就出错,这个时候应该不存在空间问题吧,当然不排除对象本身很大哈(50多K)
你说的先new出一段空间这个方法也可以,谢谢了哦
jiangzy80
2009-01-13
打赏
举报
回复
[Quote=引用 50 楼 yshuise 的回复:]
引用 49 楼 jiangzy80 的回复:
引用 47 楼 harry330 的回复:
最好别压大的对象,用指针替换,效率高。。不过我还是觉得压大对象不会出错,是你代码问题。
我本来改成了压指针的,但是现在又让我改成静态数组了。老大说不让压指针,说是wince下系统自己没有内存管理机制,说容易造成内存碎片,不知道有没有这个问题存在?
你老大是谁?vector内存是由stl管理的,本身就是为了解决内存碎片问题而设计的内存池。唉,你…
[/Quote]
对不起,我描述有点问题,他的意思不是说vector,而是直接用new哈
imafish_i
2009-01-13
打赏
举报
回复
[Quote=引用 33 楼 jiangzy80 的回复:]
#define MsndSTheaters std::vector <MsndSTheater *>
MsndSMovies m_mDataMovie
在函数中定义一个MsndSTheater,赋值后采用MsndSTheaters.push_back(mDataMovie)就出错哈。改成静态数组或这压指针就正常了。
[/Quote]
1. #define 的是<MsndSTheater *>的vector,压mDataMovie当然会出错了啊。
2. 如果不是这个错误,
{
MsndSMovies m_mDataMovie; //1
MsndSTheater mDataMovie; //2. 这里mDataMovie在栈上;
m_mDataMovie.push_back(mDataMovie); //3. push_back方法的参数是引用型,应该不会在栈上另开空间了
}
那么出错也应该在第二句那里出错啊吧,不知道我理解的对不对?
imafish_i
2009-01-12
打赏
举报
回复
vector带有异常机制吧,try{}一下试试看看是什么异常。
会不会是达到了.capacity()调整vector大小时候出现的异常?这个时候需要双份的内存
或者试试先new出一段连续空间,压placement new出来的指针,这样就应该没有碎片了吧
yshuise
2009-01-12
打赏
举报
回复
[Quote=引用 49 楼 jiangzy80 的回复:]
引用 47 楼 harry330 的回复:
最好别压大的对象,用指针替换,效率高。。不过我还是觉得压大对象不会出错,是你代码问题。
我本来改成了压指针的,但是现在又让我改成静态数组了。老大说不让压指针,说是wince下系统自己没有内存管理机制,说容易造成内存碎片,不知道有没有这个问题存在?
[/Quote]
你老大是谁?vector内存是由stl管理的,本身就是为了解决内存碎片问题而设计的内存池。唉,你老大!
jiangzy80
2009-01-12
打赏
举报
回复
[Quote=引用 47 楼 harry330 的回复:]
最好别压大的对象,用指针替换,效率高。。不过我还是觉得压大对象不会出错,是你代码问题。
[/Quote]
我本来改成了压指针的,但是现在又让我改成静态数组了。老大说不让压指针,说是wince下系统自己没有内存管理机制,说容易造成内存碎片,不知道有没有这个问题存在?
InfidelX
2009-01-12
打赏
举报
回复
[Quote=引用 19 楼 taodm 的回复:]
栈溢出!
windows是默认1M。嵌入系统一般栈默认就8~64K,甚至1K的都有。
你一下子搞一个50K的局部变量,当然就挂了。
[/Quote]
同意!严重同意的说。
harry330
2009-01-11
打赏
举报
回复
最好别压大的对象,用指针替换,效率高。。不过我还是觉得压大对象不会出错,是你代码问题。
agaric
2009-01-08
打赏
举报
回复
[Quote=引用 19 楼 taodm 的回复:]
栈溢出!
windows是默认1M。嵌入系统一般栈默认就8~64K,甚至1K的都有。
你一下子搞一个50K的局部变量,当然就挂了。
[/Quote]
64byte 栈的路过。
Row_Li
2009-01-08
打赏
举报
回复
[Quote=引用 44 楼 asksgp 的回复:]
老大你压指针嘛
-----------
弱问一声:压指针怎么用?和直接push_back()有什么不一样,哪位高人举例说明一下?
[/Quote]
直接压需要调用元素的拷贝构造函数,因此元素越复杂,效率就越低。压指针就没有这个问题,可以大大提高效率。
tianjiao85
2009-01-07
打赏
举报
回复
[Quote=引用 6 楼 yshuise 的回复:]
老大你压指针嘛。效率高。
[/Quote]
这个是个好的方法,
减少拷贝,时间空间,都是一大节约。
yshuise
2009-01-07
打赏
举报
回复
[Quote=引用 36 楼 jiangzy80 的回复:]
引用 35 楼 yshuise 的回复:
对视本事对象型或是指针的出错可能性很大。
===========
对于复杂对象和指针出错的可能性很大。
你们的意思就是说,如果定义的结构体太过于复杂,就不能采用vector来直接存放了,只能通过压指针的方式了?但是WinCE系统好像没有内存管理机制,最好不要用new来动态分配内存的啊?不知道我说的对不对哈,请指教。
[/Quote]
不是,我的意思是指结构体里面有自定义对象,而这个自定义对象里面有其他对象指针,但是有没有写赋值构造函数函数,出错是一定的。对于pod不会错误。
zhangjundriver
2009-01-07
打赏
举报
回复
mark
asksgp
2009-01-07
打赏
举报
回复
老大你压指针嘛
-----------
弱问一声:压指针怎么用?和直接push_back()有什么不一样,哪位高人举例说明一下?
「已注销」
2009-01-07
打赏
举报
回复
LZ压指针好一些啊,效率高啊
hityct1
2009-01-07
打赏
举报
回复
mark
hityct1
2009-01-07
打赏
举报
回复
mark
加载更多回复(37)
C++
push
方法与
push
_back方法 浅析
本文深入剖析C++ STL中
push
与
push
_back方法的区别与适用场景:
push
用于stack和queue的入栈/入队操作,而
push
_back专用于
vector
、list等序列容器末尾插入元素。详细说明二者函数签名、语义差异,并梳理
vector
、stack、queue的核心接口及典型用法,强调容器适配器与序列容器的设计分离原则。
vector
中
push
_back后iterator失效程序崩溃的原因
本文深入探讨C++中
Vector
的
push
_back操作,解析其如何影响容器大小与内存分配,及迭代器失效的问题。
C++中
push
_back()函数的用法
本文详细介绍了C++中
Vector
容器的操作方法,包括如何使用
push
_back()在容器末尾添加元素,以及pop_back()、clear()、empty()和erase()等常用函数的使用方式。此外,还提供了插入、删除元素的具体示例。
【C++】STL——
vector
的使用、
vector
增删查改函数的介绍和使用、
push
_back和pop_back、operator[]
本文详细介绍了C++标准库中的
vector
容器,包括如何使用
push
_back添加元素、pop_back删除尾部元素、find查找元素、insert在指定位置插入元素、erase删除指定位置的
数据
、swap交换两个
vector
的内容以及通过operator[]访问元素。这些操作展示了
vector
作为动态数组的强大功能和灵活性。
C++中
push
_back()函数
本文详细介绍了C++标准库中
Vector
容器的
push
_back()函数使用方法。通过实例展示了如何向
Vector
末尾添加元素,并对比了其他相关函数如pop_back(), clear(), empty(), erase()等的功能。
C++ 语言
65,211
社区成员
250,514
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章