读书人

求教不动态分配与动态分配的区别,该如

发布时间: 2012-05-24 11:55:41 作者: rapoo

求教不动态分配与动态分配的区别

C/C++ code
int main(){    vector<string*> spvec;    //读取vector对象    string str;    while(cin>>str){        string *pstr=&str;        spvec.push_back(pstr);    }        //输出每个string的内容及其相应的长度    for(vector<string*>::iterator iter=spvec.begin();iter!=spvec.end();++iter){        cout<<**iter<<"'s size is"<<(**iter).size()<<endl;    }        return 0;}

不动态分配string只输出向量最后一个元素的结果



C/C++ code
int main(){    vector<string*> spvec;    //读取vector对象    string str;    while(cin>>str){        string *pstr=new string;//指向string对象的指针        *pstr=str;        spvec.push_back(pstr);    }    //输出每个string的内容及其相应的长度    for(vector<string*>::iterator iter=spvec.begin();iter!=spvec.end();++iter){        cout<<**iter<<"'s size is"<<(**iter).size()<<endl;    }    //释放各个动态分配的string对象    for(vector<string*>::iterator iter=spvec.begin();iter!=spvec.end();++iter)        delete *iter;    return 0;}

求指教

[解决办法]
第一个当然了 因为你无论循环到什么时候至始至终都是在一个变量也就是一块内存上操作,所以只有一个值也不难理解
第二个 每次压栈都是一块新的string对象

貌似这和动态分配没多大关系吧
[解决办法]
第一段代码很有问题啊,vector里面的指针全部都是指向str的,而str不断从cin输入,最后储存的就是你输入的最后一个字符串,所以你输出就是你所说的最后一个元素。

第二段代码,每个指针都指向新生成的一个字符串,也就是new string(),所以输出结果没有错。

读书人网 >C++

热点推荐