c++指针的赋值 c++primer 中的一道题目

来源:百度知道 编辑:UC知道 时间:2024/06/05 08:57:26
#include <iostream>
#include <vector>
#include <string>
using namespace std;

int main()
{
string str;
string *p;
vector<string*> pstr;
while(cin>>str)
{
p=&str;
pstr.push_back(p);
}
for(vector<string*>::iterator iter=pstr.begin();iter!=pstr.end();++iter)
{
cout<<(**iter).size()<<**iter<<endl;
}
return 0;
}
这样子不行
这样就行了
int main()
{
string str;
string *p;
vector<string*> pstr;
while(cin>>str)
{
string *p = new string;
*p=str;
pstr.push_back(p);
}
for(vector<string*>::iterator iter=pstr.begin();iter!=pstr.end();++iter)
{
cout<<(**iter).size()<<**iter<<endl;
}

iter = pstr.begin();
while (iter != pstr.end())
{
delete *iter;
iter++;

int main()
{
string str;
string *p;
vector<string*> pstr; //vector中保存的是指针
while(cin>>str)
{
p=&str; //得到str的地址,str始终只有1个,因为上边只定义了一个,所以它的地址也只有一个,比如0xXXXXXX
pstr.push_back(p); //这里只是把0xXXXXXX存到了vector里 而这个地址指向的string的内容,只是你最后一次输入的内容,前边的都被覆盖了,如果像下边哪种写法,每次都new一个出来,那就是不同的string了,每次保存的也是不同的地址,指向的内容也不会被覆盖
}
for(vector<string*>::iterator iter=pstr.begin();iter!=pstr.end();++iter)
{
cout<<(**iter).size()<<**iter<<endl;
}
return 0;
}

上面只有一个string型的str,而p = &str,每次pushback都把str这个string的对象的地址push进去了,每次push一样的地址进去,所以cin>>str输入的东西被记录的永远都是最新输的一条,前面的全部被覆盖。

而下面的每次都新实例化一个 string *的指针,而且分配内存,cin>>str 输入的字符每次都存储在不同的指针对象里,当然可以。

而且它因为vector里面是一个个指针,用下面的代码手动释放内存
iter = pstr.begin();
while (iter != pstr.end())
{
delete *iter;
iter++; }

明白了吗?