| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4710 人关注过本帖, 1 人收藏
标题:求教一个vector<string>指针问题
取消只看楼主 加入收藏
dong820729
Rank: 2
等 级:论坛游民
帖 子:11
专家分:29
注 册:2009-12-21
结帖率:50%
收藏(1)
已结贴  问题点数:20 回复次数:1 
求教一个vector<string>指针问题
该题目为c++primer的习题:编写程序定义一个vector对象,其每个元素都是指向string类型的指针,读取该vector对象,输出每个string的内容及其相应的长度。

我的程序如下:

#include<iostream>
#include<string>
#include<vector>
#pragma warning(disable:4786)
using namespace std;
int main()
{
    string str;
    vector<string*> psvec;//为何这里用string*类型,不能用vector<string>*呢?
    while(cin>>str)
    {
        string *ps=new string;//为何这里要动态创建string,不能直接psvec->push_back(str)?
        *ps=str;//这里为何用*ps=str,不能使用ps=&str?
        psvec.push_back(ps);/*在这里我们把ps给psvec,那么psvec保存的应该是string*类型,
                              下面的for循环显然使用了该类型的begin(),end()操作,
                              为什么可以这样用?*/
    }
    for(vector<string*>::iterator iter=psvec.begin();iter!=psvec.end();++iter)
    {
        cout<<**iter<<" "<<(*iter)->size()<<endl;
        delete *iter;/*1.为何要释放*iter?
                       2.为何不是释放iter?
                       3.我们动态创建的是ps,为何不是释放ps?
                       4.我在网上找的答案是在这个for循环外另起一个同样的循环释放*iter,我在这里释放有何不可?
                         我在这里释放,编译也可通过,为何?*/
    }
    return 0;
}


此题给我的问题颇多,希望各位大神能给出详细解答!
先行谢过!
搜索更多相关主题的帖子: string 指针 vector 
2010-03-01 16:24
dong820729
Rank: 2
等 级:论坛游民
帖 子:11
专家分:29
注 册:2009-12-21
收藏
得分:0 
还有些疑惑:ps在这里应该是一个string类型的动态指针,那么*ps=str表示对ps解引用操作保存的是str的值,而ps=&str表示ps保存的是str的地址,那么对ps进行解引用应该也是得到的str的值啊。所以我不明白,为什么只能用*ps=str而不能使用ps=&str。事实上,我试过把*ps=str改成ps=&str,确实出现一堆错误,请问这两者有何区别,谢谢!
2010-03-02 09:12
快速回复:求教一个vector<string>指针问题
数据加载中...
 
   



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

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