C++ Primer: 实现指向字符串指针vector的输入与内容输出

需积分: 9 3 下载量 193 浏览量 更新于2024-10-16 收藏 491B TXT 举报
在C++ Primer 5.18的习题中,要求我们实现一个程序,它涉及到了C++的基本容器vector以及指针的使用。题目目标是定义一个vector对象,其中每个元素都是指向string类型的指针,然后读取这个vector中的内容,并输出每个string的内容及其对应的长度。 首先,我们从头开始理解这个任务。`#include`预处理器指令引入了所需的库,如`<iostream>`用于输入输出操作,`<string>`用于处理字符串,以及`<vector>`,这是C++标准库中的动态数组容器,用于存储同类型的数据。`using namespace std;`使得我们可以直接使用命名空间std中的成员函数和类型,简化代码。 在`main()`函数中,我们创建了一个名为`vector<string*> p`的变量,这是一个指向string指针的vector。接着,通过`while`循环,从标准输入(`cin`)读取字符串,将其转换为`string`类型,并用`new`关键字动态分配内存来创建一个新的`string`对象,将输入的字符串赋值给这个新对象。然后,我们将这个新指针`pstr`添加到vector `p`的末尾,通过`p.push_back(pstr)`实现。 接下来,我们遍历vector `p`,使用`vector<string*>::iterator iter = p.begin();`获取vector的迭代器,通过`*iter`解引用指针,访问并输出字符串内容(`cout << **iter`),以及通过`(**iter).size()`获取并输出字符串的长度。每次迭代,迭代器`iter`会自动递增,直到达到`p.end()`,即vector的末尾。 在输出完所有字符串及其长度后,为了释放之前动态分配的内存,防止内存泄漏,我们再次遍历vector,通过`delete *iter`删除每个指针指向的`string`对象,然后将`iter`递增。最后,`return 0;`表示程序正常结束。 总结来说,这段代码展示了如何在C++中使用vector容器存储指向string的指针,通过迭代器遍历并操作vector的内容,同时注意内存管理,确保资源的正确释放。这也是对C++基本数据结构和内存管理的一个实践应用。