求教一个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;
}
此题给我的问题颇多,希望各位大神能给出详细解答!
先行谢过!