| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1571 人关注过本帖, 1 人收藏
标题:求指教,求鞭笞,关于vector的元素添加。
只看楼主 加入收藏
yaobao
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:4
帖 子:1854
专家分:4121
注 册:2012-10-25
结帖率:100%
收藏(1)
已结贴  问题点数:20 回复次数:35 
求指教,求鞭笞,关于vector的元素添加。
string word;
vector<string> text;
while(cin>>word){
   text.push_back(word);
}
这是《C++ primer》上的一段示范代码,可是我就有疑问了,这样没有标定text的所占内存的大小,就循环添加元素,text在内存中是如何处理的啊,顺序?链式?这样做难道不会造成内存管理的混乱吗?
求指教啊
搜索更多相关主题的帖子: 元素 word 如何 
2013-01-15 10:55
hahayezhe
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖南张家界
等 级:贵宾
威 望:24
帖 子:1386
专家分:6999
注 册:2010-3-8
收藏
得分:0 
处理方式与vector无关 由string自己处理
2013-01-15 11:06
hahayezhe
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖南张家界
等 级:贵宾
威 望:24
帖 子:1386
专家分:6999
注 册:2010-3-8
收藏
得分:5 
vector所管理的字节 只有sizeof(string)而已!字符内容由string 自己的构造处理
2013-01-15 11:08
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9031
专家分:54061
注 册:2011-1-18
收藏
得分:5 
顺序,自动扩张内存

举个例子,假设
int* p = new int[10];
size_t len = 0;
我可以添加10个元素,每添加一个则将len加一
当我添加第11个时,我先这么做:
  int* p_ = new int[20];
  memcpy( p_, p, 10*sizeof(int) );
然后就可以再添加10个。
2013-01-15 11:08
peach5460
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:武汉
等 级:贵宾
威 望:30
帖 子:2780
专家分:6060
注 册:2008-1-28
收藏
得分:10 
汗...你还真是SM上瘾了呀

我总觉得授人以鱼不如授人以渔...
可是总有些SB叫嚣着:要么给代码给答案,要么滚蛋...
虽然我知道不要跟SB一般见识,但是我真的没修炼到宠辱不惊...
2013-01-15 11:18
peach5460
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:武汉
等 级:贵宾
威 望:30
帖 子:2780
专家分:6060
注 册:2008-1-28
收藏
得分:0 
std::string在stl里面是char*的实现
所以在push_back的时候,实际上是push_back了一个int
所以不需要定义长度...

在erse的时候,会隐式的调用string的析构释放内存...

我总觉得授人以鱼不如授人以渔...
可是总有些SB叫嚣着:要么给代码给答案,要么滚蛋...
虽然我知道不要跟SB一般见识,但是我真的没修炼到宠辱不惊...
2013-01-15 11:20
peach5460
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:武汉
等 级:贵宾
威 望:30
帖 子:2780
专家分:6060
注 册:2008-1-28
收藏
得分:0 
以下是引用peach5460在2013-1-15 11:20:24的发言:

std::string在stl里面是char*的实现
所以在push_back的时候,实际上是push_back了一个int
所以不需要定义长度...

在erse的时候,会隐式的调用string的析构释放内存...

再顺便跟你普及一下push_back
push_back实现的是浅拷贝
所以,只是把指针赋过去了...

我总觉得授人以鱼不如授人以渔...
可是总有些SB叫嚣着:要么给代码给答案,要么滚蛋...
虽然我知道不要跟SB一般见识,但是我真的没修炼到宠辱不惊...
2013-01-15 11:23
yaobao
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:4
帖 子:1854
专家分:4121
注 册:2012-10-25
收藏
得分:0 
以下是引用rjsp在2013-1-15 11:08:34的发言:

顺序,自动扩张内存

举个例子,假设
int* p = new int[10];
size_t len = 0;
我可以添加10个元素,每添加一个则将len加一
当我添加第11个时,我先这么做:
  int* p_ = new int[20];
  memcpy( p_, p, 10*sizeof(int) );
然后就可以再添加10个。
汗啊,那不是,添加几个元素就复制一次?这可是能动态增加元素了,可这招也.....

认认真真的学习,踏踏实实的走路:戒骄戒躁!!!
2013-01-15 11:33
yaobao
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:4
帖 子:1854
专家分:4121
注 册:2012-10-25
收藏
得分:0 
以下是引用peach5460在2013-1-15 11:20:24的发言:

std::string在stl里面是char*的实现
所以在push_back的时候,实际上是push_back了一个int
所以不需要定义长度...
 
在erse的时候,会隐式的调用string的析构释放内存...
???小猪兄弟,没看懂啊,我的C++才刚开始学,有的二专业术语看不懂啊

认认真真的学习,踏踏实实的走路:戒骄戒躁!!!
2013-01-15 11:37
yaobao
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:4
帖 子:1854
专家分:4121
注 册:2012-10-25
收藏
得分:0 
以下是引用peach5460在2013-1-15 11:23:26的发言:

 
再顺便跟你普及一下push_back
push_back实现的是浅拷贝
所以,只是把指针赋过去了...
小猪兄弟,这回的听懂了

认认真真的学习,踏踏实实的走路:戒骄戒躁!!!
2013-01-15 11:39
快速回复:求指教,求鞭笞,关于vector的元素添加。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.077662 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved