注册 登录
编程论坛 C++教室

新手有疑惑,麻烦大家帮我指点下。

stranger55 发布于 2011-04-23 23:33, 405 次点击
C++ primer(四版) 习题5.18
题目 /编写程序定义一个vector对象,其每个元素指向string类型的指针,读取该vector对象,输出每个string的内容,及其对应的长度。
源代码:

#include<iostream>
#include<vector>
#include<string>
using namespace std;
int main()
{
    vector<string *> svec;
    string str;
    cout<<"enter some strings(Ctrl +z to end)\n";
    while(cin>>str)
    {
       string *pstr=new string;
       *pstr=str;
        svec.push_back(pstr);
    }
    for(vector<string *>::iterator iter=svec.begin();iter!=svec.end();iter++)
    {
        cout<<**iter<<" "<<(**iter).size()<<endl;
    }
    return 0;
想问下 为什么 while 循环中要用的动态分配呢 ?
为什么不可以把代码改成
string * pstr;
*pstr=str;
svec.push_back(pstr);
我试了下  若输入 here you are
前者的输出结果符合题意
但是后者的输出结果 是 are 3
                      are 3
                      are 3 呢?
2 回复
#2
ToBeStronger2011-04-23 23:39
你申明的指针类型字符串必须在申明的同时初始化......
#3
stranger552011-04-23 23:43
回复 2楼 ToBeStronger
那我还是不太理解  最后运行结果 是怎样造成的阿?
1