读书人

大神【C++ Primer 习题】 5.18

发布时间: 2013-02-24 17:58:56 作者: rapoo

求助大神【C++ Primer 习题】 5.18
大神【C++ Primer 习题】 5.18
我自己编了一段代码:

#include <iostream>
#include <vector>
#include <string>
using namespace std;

int main()
{
vector<string*> spvec;
string str;

cout << "Enter some strings(ctrl+z to end):" << endl;
while(cin >> str)
spvec.push_back(&str);


vector<string*>::iterator iter=spvec.begin();
while(iter != spvec.end()){
cout << **iter << " " << (**iter).size() << endl;
++iter;
}

return 0;
}

输入 "I am very happy"
运行程序后输出时:
大神【C++ Primer 习题】 5.18
为什么会这样呢?是由于每次str传给vector的地址都是一样的,也就是说其实存放在vector中的指针指向同一个地址么?

[解决办法]

引用:
我自己编了一段代码:

#include <iostream>
#include <vector>
#include <string>
using namespace std;

int main()
{
vector<string*> spvec;
string str;

cout << "Enter some strings(ctrl+z to end):" << e……


是啊! 你的向量指向了同一个地址空间! 就是str的地址空间,cin>>str,总是想同一块空间赋值,会覆盖原来是值,你又把这个地址压入到spvec中,那么在spvec中的成员指向的都是同一块地址,只有一个对该空间进行操作,spvec中的成员都会跟着改变 !!
可以再while(cin>>str)
{
string *tm = new string(str);
spvec.back_push(tm);

}
[解决办法]

#include <iostream>
#include <vector>
#include <string>
using namespace std;

int main()
{
vector<string> spvec;
string str;

cout << "Enter some strings(ctrl+z to end):" << endl;
while(cin >> str)
spvec.push_back(str);


vector<string>::iterator iter=spvec.begin();
while(iter != spvec.end())
{
cout << *iter << " " << (*iter).size() << endl;
++iter;
}
return 0;
}

读书人网 >C++

热点推荐