C++ Primer习题5.18
来源:互联网 发布:汉文化 知乎 编辑:程序博客网 时间:2024/06/09 00:51
题目:编写程序定义一个 vector 对象,其每个元素都是指向 string 类型的指针,读取该vector 对象,输出每个 string 的内容及其相应的长度。
#include<iostream>#include<string>#include<vector>using namespace std;int main(){ /*普通 vector<string> svec; string str; cout << "Enter some strings(Ctr+Z to end): " << endl; while(getline(cin, str)) { svec.push_back(str); } vector<string>::iterator iter1 = svec.begin(), iter2 = svec.end(); for(; iter1 != iter2; ++iter1) cout << *iter1 << "\t\t" << endl; cout << "The length of the svec is: " << svec.end() - svec.begin() << endl; */ vector<string*> spvec; //读取vector变量 string str; cout << "Enter some strings(Ctr+Z to end): " << endl; while(getline(cin, str)) { string *pstr = new string; //指向string对象的指针 *pstr = str; spvec.push_back(pstr); //delete pstr; //此处会引起程序崩溃,在最后会删除动态分配对象的。 } //输出每个string的内容和其相应的长度 vector<string*>::iterator iter = spvec.begin(); while(iter != spvec.end()) //此处不可用iter++,否则输出相当于++iter,即第一个spvec没有输出,并企图输出一个多余的元素进行解引用 { cout << **iter << "\t\tthe length of \"" << **iter << "\" is: \t" << (**iter).size() << endl; iter++; } cout << "The length of spvec is: " << spvec.end() - spvec.begin() << endl; //释放给个动态分配的string对象 iter = spvec.begin(); while(iter != spvec.end()) //此处不可用iter++,否则输出相当于++iter,即第一个spvec没有输出,并企图输出一个多余的元素进行解引用 { delete *iter; //删除动态分配的string对象,有效回收内存,防止”内存泄露“ iter++; } return 0;}
——桑海整理
- c++primer 习题9.12
- c++primer 习题9.35
- c++primer 习题9.36
- c++primer 习题9.18
- c++primer 习题9.20
- c++primer 习题9.42
- c++primer 习题9.43
- c++primer 习题9.26
- C++Primer习题6.12
- C++primer习题6.20
- C++Primer习题9.26
- C++Primer 习题9.38
- C++Primer 习题9.39
- C++Primer习题9.40
- C++Primer习题10.9
- C++Primer习题6.12
- C++primer 习题6.22
- c++primer 习题6.12
- UML关系(泛化,实现,依赖,关联(聚合,组合))
- Android 中的数据存取方式之一: Preference(配置) .
- Linux系统调用详解
- experences on building a reliable service
- Linux中查看CPU信息
- C++ Primer习题5.18
- Android LockScreen
- 数据加密方法介绍 简单到深入
- android 实现listview的分页加载
- 浅谈ORM对象关系数据库映射
- DBO 预处理语句和存储过程
- android 获取正在运行的应用程序列表 .
- HDOJ 2795 Billboard
- ioctl