Vector的用法?

sunhuanwen 2008-04-08 08:53:25
我想知道
vector
在初始化的时候
未指定大小,系统会为他分配多大的空间?

然后使用push_back插入
再用erase(vec.begin(),vec.end())删除
这样反复操作
会不会从未来的某一次push_back开始就无法插入元素了?
...全文
1138 14 打赏 收藏 举报
写回复
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunhuanwen 2008-04-08
  • 打赏
  • 举报
回复
11楼
能帮改下代码吗

我刚试下加了clear()
没效果
zhangxuyu1118 2008-04-08
  • 打赏
  • 举报
回复
放心使用,请勿担心
xiao234666 2008-04-08
  • 打赏
  • 举报
回复
每次文件操作后,给该指针使用clear()一次,就好了.我也遇到过类似情况
sunhuanwen 2008-04-08
  • 打赏
  • 举报
回复
这个应该是文件操作的问题

不知道为什么在执行某一次之后为什么
文件位置就指向了文件结尾了?

看来不是vector的事....
我理解错了

谁能给我教教我如何把上面的函数正确输出啊?
sunhuanwen 2008-04-08
  • 打赏
  • 举报
回复
我是把在文件操作中使用的

int main()
{
fstream fp("a.txt", ios_base::in);
if(!fp)
{
cout<<"can`t open a!"<<endl;
return -1;
}
fp.seekg(0);
vector<char>vec;
char ch;
// for(int j=0; j<10; ++j)
for(int j=0; j<10000; ++j)
{
for(int i=0; i<4; ++i)
{
fp.get(ch);
vec.push_back(ch);
cout<<vec[i]<<endl;
}
vec.erase(vec.begin(), vec.end());
}

return 0;
}

这样用输出结果就有问题
注释的是正常的显示


这是为什么?

a.txt是这样的 就是用ctrl+v 粘的,有时汇多个V

asdf asdjf lksjd fjsdl kjsdj flsjkdflkjsl dfjiowe rjldkj jasasdf asdjf lksjd fjsdl kjsdj flsjkdflkjsl dfjiowe rjldkj jasasdf asdjf lksjd fjsdl kjsdj flsjkdflkjsl dfjiowe rjldkj jasasdf asdjf lksjd fjsdl kjsdj flsjkdflkjsl dfjiowe rjldkj jasvasdf asdjf lksjd fjsdl kjsdj flsjkdflkjsl dfjiowe rjldkj jasvasdf asdjf lksjd fjsdl kjsdj flsjkdflkjsl dfjiowe rjldkj jasasdf asdjf lksjd fjsdl kjsdj flsjkdflkjsl dfjiowe rjldkj jasasdf asdjf lksjd fjsdl kjsdj flsjkdflkjsl dfjiowe rjldkj jasasdf asdjf lksjd fjsdl kjsdj flsjkdflkjsl dfjiowe rjldkj jasasdf asdjf lksjd fjsdl kjsdj flsjkdflkjsl dfjiowe rjldkj jasasdf asdjf lksjd fjsdl kjsdj flsjkdflkjsl dfjiowe rjldkj jasasdf asdjf lksjd fjsdl kjsdj flsjkdflkjsl dfjiowe rjldkj jasasdf asdjf lksjd fjsdl kjsdj flsjkdflkjsl dfjiowe rjldkj jasasdf asdjf lksjd fjsdl kjsdj flsjkdflkjsl dfjiowe rjldkj jasasdf asdjf lksjd fjsdl kjsdj flsjkdflkjsl dfjiowe rjldkj jasasdf asdjf lksjd fjsdl kjsdj flsjkdflkjsl dfjiowe rjldkj jasasdf asdjf lksjd fjsdl kjsdj flsjkdflkjsl dfjiowe rjldkj jasasdf asdjf lksjd fjsdl kjsdj flsjkdflkjsl dfjiowe rjldkj jasasdf asdjf lksjd fjsdl kjsdj flsjkdflkjsl dfjiowe rjldkj jasvasdf asdjf lksjd fjsdl kjsdj flsjkdflkjsl dfjiowe rjldkj jasasdf asdjf lksjd fjsdl kjsdj flsjkdflkjsl dfjiowe rjldkj jasasdf asdjf lksjd fjsdl kjsdj flsjkdflkjsl dfjiowe rjldkj jasasdf asdjf lksjd fjsdl kjsdj flsjkdflkjsl dfjiowe rjldkj jasasdf asdjf lksjd fjsdl kjsdj flsjkdflkjsl dfjiowe rjldkj jasasdf asdjf lksjd fjsdl kjsdj flsjkdflkjsl dfjiowe rjldkj jasasdf asdjf lksjd fjsdl kjsdj flsjkdflkjsl dfjiowe rjldkj jasvasdf asdjf lksjd fjsdl kjsdj flsjkdflkjsl dfjiowe rjldkj jasasdf asdjf lksjd fjsdl kjsdj flsjkdflkjsl dfjiowe rjldkj jasasdf asdjf lksjd fjsdl kjsdj flsjkdflkjsl dfjiowe rjldkj jasasdf asdjf lksjd fjsdl kjsdj flsjkdflkjsl dfjiowe rjldkj jasvasdf asdjf lksjd fjsdl kjsdj flsjkdflkjsl dfjiowe rjldkj jasvvasdf asdjf lksjd fjsdl kjsdj flsjkdflkjsl dfjiowe rjldkj jasasdf asdjf lksjd fjsdl kjsdj flsjkdflkjsl dfjiowe rjldkj jasasdf asdjf lksjd fjsdl kjsdj flsjkdflkjsl dfjiowe rjldkj jasasdf asdjf lksjd fjsdl kjsdj flsjkdflkjsl dfjiowe rjldkj jasvvvasdf asdjf lksjd fjsdl kjsdj flsjkdflkjsl dfjiowe rjldkj jasasdf asdjf lksjd fjsdl kjsdj flsjkdflkjsl dfjiowe rjldkj jasvasdf asdjf lksjd fjsdl kjsdj flsjkdflkjsl dfjiowe rjldkj jasasdf asdjf lksjd fjsdl kjsdj flsjkdflkjsl dfjiowe rjldkj jasvasdf asdjf lksjd fjsdl kjsdj flsjkdflkjsl dfjiowe rjldkj jas
DonyUnx 2008-04-08
  • 打赏
  • 举报
回复
写错了是类型长度越小,容量越大!
DonyUnx 2008-04-08
  • 打赏
  • 举报
回复
vector初始分配的大小和存储元素的类型有关吧,我记得c++primer上这么说的,类型长度越长容量越大,其实感觉也就是内存空间固定的意思。
第二个问题不太明白,为什么会有问题呢?
liutengdas 2008-04-08
  • 打赏
  • 举报
回复
未指定vector的大小,系统会给它分配1K的大小,貌似,这个大小是STL的源码里指定的.
如果某一次push_back()之后,所用的内存会超过1K,那么 vector会自动申请2K的内存,然后把先前的数据都拷贝到2K的内存中.并释放刚才那1K的内存.

我刚学STL的时候,对自动这个词不理解,以为它有什么特异功能,其实这些都是在STL源码有体现的,至于为什么要重新申请2K的内存而释放掉刚才的1K,这是因为vector使用的是一整块内存,在连续的内存块才能实现通过下标索引到相关的值.

STL基本上都是先申请一整块大内存,然后分配给小单元使用,比如链表也是,里面并不像我们写的链表,每一个元素加入都要new一次,STL里面也是先new一大块内存再来使用,原因是多次使用 new delete 会增加系统的开销.
sunhuanwen 2008-04-08
  • 打赏
  • 举报
回复
上个课

回来在测。。。。
就呆在云上 2008-04-08
  • 打赏
  • 举报
回复
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> a;
a.push_back(1);
a.erase(a.begin(), a.end());
a.push_back(2);
//明显没有问题
}
就呆在云上 2008-04-08
  • 打赏
  • 举报
回复
具体要看怎么实现stl的。
一般的如果你就是一个:
vector<int> a;
那么就只有一些成员变量需要分配一些个字节,指针分配点字节,
taodm 2008-04-08
  • 打赏
  • 举报
回复
未指定大小,系统会为他分配多大的空间?
不知道,貌似C++标准没规定

问题2
建议你自己搞个1000万次循环试试,实践出真知。
独孤过儿 2008-04-08
  • 打赏
  • 举报
回复
不会的,vector会动态的调整容量的,详细的可以参见vector的说明...
sunhuanwen 2008-04-08
  • 打赏
  • 举报
回复
我想把我出问题的程序用附件传上来
不知道能不能传啊?
发帖
C++ 语言

6.3w+

社区成员

C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
帖子事件
创建了帖子
2008-04-08 08:53
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下