关于压力容器作业指导书的问题?求大家指导。。。小弟刚学C++

新手园地& & & 硬件问题Linux系统管理Linux网络问题Linux环境编程Linux桌面系统国产LinuxBSD& & & BSD文档中心AIX& & & 新手入门& & & AIX文档中心& & & 资源下载& & & Power高级应用& & & IBM存储AS400Solaris& & & Solaris文档中心HP-UX& & & HP文档中心SCO UNIX& & & SCO文档中心互操作专区IRIXTru64 UNIXMac OS X门户网站运维集群和高可用服务器应用监控和防护虚拟化技术架构设计行业应用和管理服务器及硬件技术& & & 服务器资源下载云计算& & & 云计算文档中心& & & 云计算业界& & & 云计算资源下载存储备份& & & 存储文档中心& & & 存储业界& & & 存储资源下载& & & Symantec技术交流区安全技术网络技术& & & 网络技术文档中心C/C++& & & GUI编程& & & Functional编程内核源码& & & 内核问题移动开发& & & 移动开发技术资料ShellPerlJava& & & Java文档中心PHP& & & php文档中心Python& & & Python文档中心RubyCPU与编译器嵌入式开发驱动开发Web开发VoIP开发技术MySQL& & & MySQL文档中心SybaseOraclePostgreSQLDB2Informix数据仓库与数据挖掘NoSQL技术IT业界新闻与评论IT职业生涯& & & 猎头招聘IT图书与评论& & & CU技术图书大系& & & Linux书友会二手交易下载共享Linux文档专区IT培训与认证& & & 培训交流& & & 认证培训清茶斋投资理财运动地带快乐数码摄影& & & 摄影器材& & & 摄影比赛专区IT爱车族旅游天下站务交流版主会议室博客SNS站务交流区CU活动专区& & & Power活动专区& & & 拍卖交流区频道交流区
空间积分0 信誉积分100 UID阅读权限10积分13帖子精华可用积分13 专家积分0 在线时间0 小时注册时间最后登录
白手起家, 积分 13, 距离下一级还需 187 积分
帖子主题精华可用积分13 专家积分0 在线时间0 小时注册时间最后登录
论坛徽章:0
在vector容器初始化中,初始化与拷贝有什么不同呢?
例如:vector&string&;svec(10,0);
& && && &vector&string&;user_//初始化
& && &&&user_names=//拷贝
这种初始化与拷贝之间有什么关系呢?
&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp
空间积分0 信誉积分401 UID44767阅读权限100积分14923帖子精华可用积分14923 专家积分275 在线时间4141 小时注册时间最后登录
帖子主题精华可用积分14923 专家积分275 在线时间4141 小时注册时间最后登录
论坛徽章:1
请教一个关于vector容器初始化的问题
看c++中初始化和赋值操作的区别。
那个不叫拷贝,叫赋值操作。
空间积分0 信誉积分102 UID73413阅读权限20积分825帖子精华可用积分825 专家积分0 在线时间0 小时注册时间最后登录
丰衣足食, 积分 825, 距离下一级还需 175 积分
帖子主题精华可用积分825 专家积分0 在线时间0 小时注册时间最后登录
论坛徽章:0
请教一个关于vector容器初始化的问题
vector是动态分配内存的,如果不初始化,赋值时就会出现问题。
空间积分0 信誉积分100 UID阅读权限10积分13帖子精华可用积分13 专家积分0 在线时间0 小时注册时间最后登录
白手起家, 积分 13, 距离下一级还需 187 积分
帖子主题精华可用积分13 专家积分0 在线时间0 小时注册时间最后登录
论坛徽章:0
请教一个关于vector容器初始化的问题
我这里写错了点东西,
vector&string&;user_names(svec);
可不可以理解为将user_names的指针定义为svec的指针呢?
空间积分28 信誉积分100 UID阅读权限100积分42285帖子精华可用积分42285 专家积分297 在线时间299 小时注册时间最后登录
帖子主题精华可用积分42285 专家积分297 在线时间299 小时注册时间最后登录
论坛徽章:0
请教一个关于vector容器初始化的问题
原帖由 &狮子摇牛& 发表:
我这里写错了点东西,
vector&string&;user_names(svec);
可不可以理解为将user_names的指针定义为svec的指针呢?
对于 vector 类而言, 就是调用了 拷贝构造函数来复制 svec 的内容.
对于别的类可不一定.
Qsheii jxu Whuqj Vyhu Mqbb mu sqd huqsx uluho sehduh yd jxu mehbt.
北京皓辰网域网络信息技术有限公司. 版权所有 京ICP证:060528号 北京市公安局海淀分局网监中心备案编号:
广播电视节目制作经营许可证(京) 字第1234号
中国互联网协会会员&&联系我们:
感谢所有关心和支持过ChinaUnix的朋友们
转载本站内容请注明原作者名及出处首先,vector 在VC 2008 中的实现比较复杂,虽然vector 的声明跟VC6.0 是一致的,如下:
&C++ Code&
template&&&
class&_Ty,&
class&_Ax&=&allocator&_Ty&&&
但在VC2008 中vector 还有基类,如下:
&C++ Code&
//&TEMPLATE&CLASS&vector
template&&&
class&_Ty,
class&_Ax&&
class&vector
public&_Vector_val&_Ty,&_Ax&
稍微来看一下基类_Vector_val:
&C++ Code&
//&TEMPLATE&CLASS&_Vector_val
template&&&
class&_Ty,
class&_Alloc&&
class&_Vector_val
public&_CONTAINER_BASE_AUX_ALLOC&_Alloc&
//&base&class&for&vector&to&hold&allocator&_Alval
protected:
&&&&_Vector_val(_Alloc&_Al&=&_Alloc())
&&&&&&&&:&_CONTAINER_BASE_AUX_ALLOC&_Alloc&(_Al),&_Alval(_Al)
//&construct&allocator&from&_Al &&&&}
typename&_Alloc::
&&&&rebind&_Ty&::other&_A
&&&&_Alty&_A&&&
//&allocator&object&for&values };
为了理解_Alty 的类型,还得看一下allocator模板类:
&C++ Code&
class&_Ty&&
class&allocator
template&&&
class&_CRTIMP2_PURE&allocator&
//&generic&allocator&for&type&void &&&&
class&_Other&
struct&rebind
&&&&&&&&&&&&
//&convert&an&allocator&void&&to&an&allocator&&_Other& &&&&&&&&&&&&
typedef&allocator&_Other&&
&&&&&&&&};
&&&&&&&&....
typedef&typename&_Alloc::template&rebind&_Ty&::other&_A 整体来看是类型定义,假设现在我们这样使用
vector&int&, 那么_Ty 即 int, _Ax 即 allocator&int&,由vector 类传递给 基类_Vector_val,则_Alloc 即
&allocator&int& ;可以看到&allocator&void& 是allocator 模板类的特化,&rebind&_Ty&&是成员模板类,other是成员模板类
中自定义类型,_Ty 即是int , 那么other 类型也就是allocator&int&, 也就是说_Alty 是类型&allocator&int& 。
_Alty _A 即 基类定义了一个allocator&int& 类型的成员,被vector 继承后以后用于为vector 里面元素分配内存等操作。
而在VC6.0,_Alval 是直接作为vector 自身的成员存在的。此外还有一个比较大的不同点在于,两个版本对于capacity 也就是容量的
计算方式不同,接下去的测试可以看到这种不同,在这里可以先说明一下:
VC2008:容量每次增长为原先容量 + 原先容量 / 2;
VC6.0 :容量每次增长为原先容量的2倍。
容量跟vector 大小的概念是不一样的,capacity 》= size,如下图所示:
size 指的是avail &- data 的区间;capacity 指的是 limit - data 的区间;也就是说存在尚未使用的空间。
下面是模仿VC6.0 中vector 的实现写的Vec 类,程序主要参考《Accelerated C++》 ,略有修改,比如将接口修改成与VC6.0 一致,
这样做的好处是可以传递第二个参数,也就是说可以自己决定内存的分配管理方式;实现capacity() 函数等;
&C++ Code&
/************************************************************************* &&File&Name:&template_class_Vec.h &&Author:&Simba &&Mail:& &&Created&Time:&Thu&07&Feb&:12&PM&CST ************************************************************************/
#include&iostream&
#include&cstddef&
#include&memory&
#include&algorithm&
template&&&
class&A_&=&std::allocator&T&&&
//&interface &&&&
typedef&T&*
const&T&*const_
typedef&size_t&size_
typedef&T&value_
typedef&std::ptrdiff_t&difference_
typedef&T&&
const&T&&const_
&&&&&&&&create();&&&&
//&default&constructor &&&&}
//&const&T&&&t&=&T();意思是默认参数,当没有传递t时,默认使用T()&(type&T's&default&constructor) &&&&
//explicit表示不允许构造函数进行隐式类型转换 &&&&
explicit&Vec(size_type&n,&
const&T&&val&=&T())
&&&&&&&&create(n,&val);
const&Vec&&v)
&&&&&&&&create(v.begin(),&v.end());&&&&
//&copy&constructor &&&&}
operator=(
const&Vec&&);&&
//&assigment&operator &&&&~Vec()
&&&&&&&&uncreate();&&&&
//&destructor &&&&}
&&&&size_type&size()&
return&avail&-&&&&&
//&a&value&of&ptrdiff_t &&&&}
&&&&size_type&capacity()&
return&(data&==&
0&:&limit&-&data);
operator[](size_type&i)
return&data[i];
/*&because&their&left&operand&is&different(const),&we&can&overload&the&operation&*/
operator[](size_type&i)&
return&data[i];
&&&&iterator&begin()
&&&&const_iterator&begin()&
&&&&iterator&end()
&&&&const_iterator&end()&
void&push_back(
const&T&&val)
if&(avail&==&limit)&
//&get&space&if&needed &&&&&&&&&&&&grow();
&&&&&&&&unchecked_append(val);&
//&append&the&new&element &&&&}
void&clear()
&&&&&&&&uncreate();
void&empty()
return&data&==&
&&&&iterator&&
//&first&element&in&the&Vec &&&&iterator&&
//&one&past&the&last&constructed&element&in&the&Vec &&&&iterator&&
//&one&past&the&last&available&element
//&object&to&handle&memory&allocation &&&&
//&allocate&and&initialize&the&underlying&array &&&&
void&create();
void&create(size_type,&
const&T&&);
void&create(const_iterator,&const_iterator);
//&destory&the&element&in&the&array&and&free&the&memory &&&&
void&uncreate();
//&support&functions&for&push_back &&&&
void&grow();
void&unchecked_append(
const&T&&);
template&&&
Vec&T,&A_&&&Vec&T,&A_&::
operator=(
const&Vec&T,&A_&&&rhs)
//&check&for&self-assigment &&&&
if&(&rhs&!=&
&&&&&&&&uncreate();
&&&&&&&&create(rhs.begin(),&rhs.end());
template&&&
void&Vec&T,&A_&::create()
&&&&data&=&avail&=&limit&=&
template&&&
void&Vec&T,&A_&::create(size_type&n,&
const&T&&val)
&&&&data&=&alloc.allocate(n);
&&&&limit&=&avail&=&data&+&n;
&&&&std::uninitialized_fill(data,&limit,&val);
template&&&
void&Vec&T,&A_&::create(const_iterator&i,&const_iterator&j)
&&&&data&=&alloc.allocate(j&-&i);
&&&&limit&=&avail&=&std::uninitialized_copy(i,&j,&data);
/*&return&a&pointer&to&(one&past)&the&last&element&that&it&initialized&*/
template&&&
void&Vec&T,&A_&::uncreate()
//&destroy(in&reverse&order)&the&elements&that&were&constructed &&&&&&&&iterator&it&=&
while&(it&!=&data)
&&&&&&&&&&&&
//&destory&runs&T's&destructor&for&that&object,&rendering&the&storage&uninitialized&again &&&&&&&&&&&&alloc.destroy(--it);
&&&&&&&&alloc.deallocate(data,&limit&-&data);
//&reset&pointers&to&indicate&that&Vec&is&empty&again &&&&data&=&limit&=&avail&=&
template&&&
void&Vec&T,&A_&::grow()
//&when&growing,&allocate&twice&as&much&space&as&currently&in&use &&&&size_type&new_size&=&std::max(
2&*&(limit&-&data),&ptrdiff_t(
//&allocate&new&space&and&copy&elements&to&the&new&space &&&&iterator&new_data&=&alloc.allocate(new_size);
&&&&iterator&new_avail&=&std::uninitialized_copy(data,&avail,&new_data);
//&return&the&old&space &&&&uncreate();
//&reset&pointers&to&point&to&the&newly&allocated&space &&&&data&=&new_
&&&&avail&=&new_
&&&&limit&=&data&+&new_
template&&&
//&error&C4519:&仅允许在类模板上使用默认模板参数
void&Vec&T,&A_&::unchecked_append(
const&T&&val)
&&&&alloc.construct(avail++,&val);
先介绍一下用到的一些类和函数:
allocator 模板类:
&C++ Code&
#include&&memory&
template&&
class&allocator
&&&&T&*allocate(size_t);
void&deallocate(T&*,&size_t);
void&construct(T&*,&size_t);
void&destroy(T&*);
//....... };
当然实际的接口没实现没那么简单,但大概实现的功能差不多:
allocate 调用operator new ;deallocate 调用 construct 调用placement new (即在分配好的内
存上调用拷贝构造函数),destroy 调用析构函数。
两个std函数:
&C++ Code&
template&&&
class&In,&
class&For&
For&uninitialized_copy(In,&In,&For);
template&&&
class&For,&
void&uninitialized_fill(For,&For,&
const&T&&);
如&std::uninitialized_copy(i,&j,&data); 即将i ~ j 指向区间的数值都拷贝到data 指向的区间,返回的是最后一个初始化值的下一个位置。
std::uninitialized_fill(data,&limit,&val); &即将 data ~ limit 指向的区间都初始化为val 。
为了理解push_back 的工作原理,写个小程序测试一下:
&C++ Code&
#include&&iostream&
namespace&
class&Test
&&&&Test()
&&&&&&&&cout&&&&
"Test&..."&&&&
const&Test&&other)
&&&&&&&&cout&&&&
"copy&Test&..."&&&&
&&&&~Test()
&&&&&&&&cout&&&&
"~Test&..."&&&&
&&&&vector&Test&&v2;
&&&&Test&t1;
&&&&Test&t2;
&&&&Test&t3;
&&&&v2.push_back(t1);
&&&&v2.push_back(t2);
&&&&v2.push_back(t3);
从输出可以看出,构造函数调用3次,拷贝构造函数调用6次,析构函数调用9次,下面来分析一下,首先看下图:
首先定义t1, t2, t3的时候调用三次构造函数,这个没什么好说的;接着第一次调用push_back,调用grow进而调用alloc.allocate,
allocate 函数调用operator new 分配一块内存,第一次uncreate 没有效果,接着push_back 里面调用uncheck_append,进而调用
alloc.construct,即调用placement new(new (_Vptr) _T1(_Val); ),在原先分配好的内存上调用一次拷贝构造函数。
接着第二次调用push_back,一样的流程,这次先分配两块内存,将t1 拷贝到第一个位置,调用uncreate(),先调用alloc.destroy,即
调用一次析构函数,接着调用alloc.deallcate,即调用operator delete 释放内存,最后调用uncheck_append将t2 拷贝到第二个位置。
第三次调用push_back,也一样分配三块内存,将t1, t2 拷贝下来,然后分别析构,最后将t3 拷贝上去。
程序结束包括定义的三个Test 对象t1, t2, t3 ,析构3次,Vec&Test& v2; &v2是局部对象,生存期到则调用析构函数~Vec(); 里面调用
uncreate(), 调用3次Test 对象的析构函数,调用operator delete 释放3个对象的内存。故总共析构了6次。
在VC2008 中换成&vector&Test& v2; 来测试的话,输出略有不同,如下:
输出的次数是一致的,只是拷贝的顺序有所不同而已,比如第二次调用push_back 的时候,VC2008 中的vector 是先拷贝t2, 接着拷
贝t1, 然后将t1 释放掉。
最后再来提一下关于capacity 的计算,如下的测试程序:
&C++ Code&
#include&&iostream&
namespace&
&&&&v.push_back(
&&&&cout&&&&v.capacity()&&&&
&&&&v.push_back(
&&&&cout&&&&v.capacity()&&&&
&&&&v.push_back(
&&&&cout&&&&v.capacity()&&&&
&&&&v.push_back(
&&&&cout&&&&v.capacity()&&&&
&&&&v.push_back(
&&&&cout&&&&v.capacity()&&&&
&&&&v.push_back(
&&&&cout&&&&v.capacity()&&&&
&&&&v.push_back(
&&&&cout&&&&v.capacity()&&&&
输出为 1 2 4 4 8 8 8 即在不够的情况下每次增长为原来的2倍。
如果换成 vector&int& 测试,那么输出是 1 2 3 4 6 6 9,即在不够的情况每次增长为原来大小 + 原来大小 / 2;
看到这里,有些朋友会疑惑了,由1怎么会增长到2呢?按照原则不是还是1?其实只要看一下vector 的源码就清楚了:
&C++ Code&
void&_Insert_n(const_iterator&_Where,
&&&&&&&&&&&&&&&size_type&_Count,&
const&_Ty&&_Val)
//&insert&_Count&*&_Val&at&_Where
&&&&size_type&_Capacity&=&capacity();
if&(_Capacity&&&size()&+&_Count)
//&not&enough&room,&reallocate &&&&&&&&_Capacity&=&max_size()&-&_Capacity&/&
2&&&_Capacity
&&&&&&&&&&&&&&&&&&&&?&
0&:&_Capacity&+&_Capacity&/&
//&try&to&grow&by&50% &&&&&&&&
if&(_Capacity&&&size()&+&_Count)
&&&&&&&&&&&&_Capacity&=&size()&+&_C
&&&&&&&&pointer&_Newvec&=&
this-&_Alval.allocate(_Capacity);
&&&&&&&&pointer&_Ptr&=&_N
&&&&&&&&.....
_Insert_n 是被push_back 调用的,当我们试图增长为_Capacity&+&_Capacity&/&2; &时,下面还有一个判断:
&&if&(_Capacity&&&size()&+&_Count)
&&&&&&&&&&&&_Capacity&=&size()&+&_C
现在试图增长为 1 + 1/ 2 = 1; 此时因为 1 & 1 + 1 ; 所以&_Capacity = 1 + 1 = 2;&
其他情况都是直接按公式增长。
从上面的分析也可以看出,当push_back 的时候往往带有拷贝和析构多个操作,所以一下子分配比size() 大的空间capacity,可以减
轻频繁操作造成的效率问题。
C++ primer 第四版 Effective C++ 3rd C++编程规范
阅读(...) 评论()查看: 747|回复: 12
程序运行的结果不是很明白,望各位帮忙指导一下。谢谢了。。
附源代码:
void display (vector & v)
& &&&while (!v.empty ())
& & & &&&{
& & & && && &&&cout
(56)当前离线
UID153性别男阅读权限1记录日志QQ注册时间在线时间442 小时最后登录飘香币10000
帖子日志精华0贡献值0 知名度515 飘香币10000
南国飘香BBS - 帖子版权1、本主题所有言论和图片纯属作者个人意见,与本站立场无关
2、本站所有主题由该帖子作者发表,该帖子作者与南国飘香BBS站享有帖子相关版权
3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和南国飘香BBS站的同意
4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
7、南国飘香BBS站管理员和版主有权不事先通知发贴者而删除本文
提示: 作者被禁止或删除 内容自动屏蔽
独孤剑圣 该用户已被删除
Re: 请教:c++的容器问题(有代码)
不急啊。。在这先谢谢你了啊。。。
~~~~~~只有到崩溃的那一刻,才可能达到完美~~~~~
(56)当前离线
UID153性别男阅读权限1记录日志QQ注册时间在线时间442 小时最后登录飘香币10000
帖子日志精华0贡献值0 知名度515 飘香币10000
提示: 作者被禁止或删除 内容自动屏蔽
独孤剑圣 该用户已被删除
Re: 请教:c++的容器问题(有代码)
你是信工的啊。。。哪个专业的啊。。我是05通信的。。呵呵
~~~~~~只有到崩溃的那一刻,才可能达到完美~~~~~
(56)当前离线
UID153性别男阅读权限1记录日志QQ注册时间在线时间442 小时最后登录飘香币10000
帖子日志精华0贡献值0 知名度515 飘香币10000
提示: 作者被禁止或删除 内容自动屏蔽
独孤剑圣 该用户已被删除
Re: 请教:c++的容器问题(有代码)
我在想你干嘛不是个研究生呢。。这样我就能多少有点自信了。。哈哈
惭愧ing。。。看来要加紧学习才行。。。
~~~~~~只有到崩溃的那一刻,才可能达到完美~~~~~
(56)当前离线
UID153性别男阅读权限1记录日志QQ注册时间在线时间442 小时最后登录飘香币10000
帖子日志精华0贡献值0 知名度515 飘香币10000
提示: 作者被禁止或删除 内容自动屏蔽
独孤剑圣 该用户已被删除
Re: 请教:c++的容器问题(有代码)
其实我们学院还是蛮好的。。大一的时候教c++。大二教数据结构,大三教汇编(微机8086)还有单片机。。所以我们出去跟人家竞争的时候。我们属于会通信,计算机。还有硬件(单片机)。。竞争力挺强的。。
只不过我没有怎么学习。。(后悔ing)^_^。。
现在的话,汇编会那么一点。。不过已经没什么时间去学了。。所以现在只能急功近利的去进攻c++。。也因为自己选择的方向是网络编程。所以c++比较重要。希望半年后能有点见效。。找到个好工作。。。o(∩_∩)o...哈哈
~~~~~~只有到崩溃的那一刻,才可能达到完美~~~~~
(56)当前离线
UID153性别男阅读权限1记录日志QQ注册时间在线时间442 小时最后登录飘香币10000
帖子日志精华0贡献值0 知名度515 飘香币10000
提示: 作者被禁止或删除 内容自动屏蔽
独孤剑圣 该用户已被删除
推荐阅读 /2
首先祝各位老总大大月薪上万
转眼又是毕业季,三月尾,各学院的毕业照时间也应该陆续出来了,请各位大四的师兄师姐们以及亲爱的站友们能够将了解到的每个学院的毕业照时间跟帖回复,便于各位站友了解。本帖用于统计今年(2015)各学院的毕业照时间,要求真实可靠的毕业照日期。请勿抛砖灌水,谢谢。
或许很多人都不知道,早在1997年,在我们当中还有很多人在读小学的时候,南国飘香就已经建站了。历经了十余载的辛苦经营运作,飘香终于日益壮大并坚持走到了今天,感谢一届又一届的管理者,是你们用辛勤的汗水浇筑起了飘香发展历史的伟大长城。
有人说,既然经历过,那就一定要有所收藏才能印象深刻。虽然大家在飘香这段共同的经历都曾经让彼此动容,但毕竟没能留下实质性的东西,实在可惜。既然如此,为什么不在来一次“站衫”呢。
19:56&&|&&
&&|&&&&|&&&
Powered by新手c++关于把数据从文件读到容器的问题,求大神帮助
[问题点数:40分,结帖人u]
新手c++关于把数据从文件读到容器的问题,求大神帮助
[问题点数:40分,结帖人u]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
相关帖子推荐:
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。c++关于容器的问题求解!!!_百度知道
c++关于容器的问题求解!!!
string *s=&ivec2[num].push_back(s),ivec2存储string建两个容器; ivec。为什么运行起来总是不对呢,赋值ivec2之后,ivec存储指向string的指针;之后*ivec[num]就是ivec2里面的string元素,能直接对ivec2下标取地址符然后给ivec复制吗
提问者采纳
这个临时变量赋值给s以后就消失了,和int差不多,是一个临时变量; 能直接对ivec2下标取地址符然后给ivec复制吗,类似于值传递&gt。s保存的指针就没有意义了,这个string不是容器里面的元素?不可以。ivec2[num]得到的是个string,和容器里的元素等值。对string的操作
你好,很感激你的回答。如果vec2[num]得到的是临时变量的话,那么*s操作应该会出错吧,可是我操作*s会输出和ivec2[num]一样的值ivec2.push_back(str);
string *s=&ivec2[num];
cout&&*s&&说明&ivec2[num]把准确的地址传递给了s吧?
抱歉刚才回答错了。vector的[]操作符定义为reference operator[](
size_type _Pos);所以返回的string不是临时变量,确实是容器里面的元素。你从ivec2里取出元素地址之后,有没有再往ivec2中插入元素?ivec2插入一定数量元素后,如果容器空间不够,ivec2会自动扩充一下空间(一般为2的倍数),然后把原空间的内容复制到新空间里,再释放掉原空间。这个时候,元素的地址会改变的。下面的代码把ii&4改成ii&5就会不一样了。str=&0&; vec2.push_back(str);
str=&1&; vec2.push_back(str);
str=&2&; vec2.push_back(str);
cout&&&org:&&&&vec2[0]&&
for(int ii=3; ii&4; ii++)
str = ostr.str();
vec2.push_back(str);
cout&&&new:&&&&vec2[0]&&
提问者评价
很感谢你,希望以后有问题还能请教你
其他类似问题
问题求解的相关知识
按默认排序
其他1条回答
能不能把源码贴出来?
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁

我要回帖

更多关于 有求皆苦 无欲则刚 的文章

 

随机推荐