首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

大神【C++ Primer 习题】 5.18

2013-02-24 
求助大神【C++ Primer 习题】 5.18我自己编了一段代码:#include iostream#include vector#include stri

求助大神【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;
 }

热点排行