基于STL list实现deque类的print函数实现困惑求助
搞定你的deque print函数问题
嘿,看来你离完成这个用STL list实现deque的作业只差最后一步啦!我来帮你梳理清楚问题所在,以及怎么修复这个print函数。
首先得指出一个关键小错误:你当前的构造函数里创建的是局部list变量,这会导致deque对象根本没保存住内部容器数据——构造函数执行完,这个局部的l就被销毁了,后续print的时候自然拿不到任何内容。
第一步:修正deque的类定义与构造函数
你需要把std::list<T>作为deque类的私有成员变量,而不是在构造函数里定义局部变量。比如:
template <typename T> class deque { private: // 把list作为类的成员变量,让deque对象能持久保存数据 std::list<T> data_; public: // 构造函数直接用默认初始化即可,list会自动完成默认构造 deque() = default; // 为方便测试,可添加常用接口比如push_back void push_back(const T& value) { data_.push_back(value); } // 声明print函数为友元,让它能访问私有成员data_ friend void print(std::ostream& os, const deque<T>& dq); };
第二步:实现print函数
现在print函数可以直接访问deque内部的data_成员,遍历这个list并输出每个元素即可:
template <typename T> void print(std::ostream& os, const deque<T>& dq) { // 遍历list的每个元素,输出到目标ostream对象中 for (const auto& elem : dq.data_) { os << elem << " "; } // 如果需要换行,可添加 os << std::endl; }
如果你不想用友元函数,也可以给deque加一个公共只读接口来获取内部list,这样print函数就不需要友元权限了:
// 在deque类的public区域添加这个函数 const std::list<T>& get_internal_list() const { return data_; } // 此时print函数的实现可改为: template <typename T> void print(std::ostream& os, const deque<T>& dq) { const auto& internal_list = dq.get_internal_list(); for (const auto& elem : internal_list) { os << elem << " "; } }
测试验证
写个简单的测试代码确认效果:
#include <iostream> #include <list> using namespace std; // 上面的deque类定义和print函数实现放在这里 int main() { deque<int> my_deque; my_deque.push_back(10); my_deque.push_back(20); my_deque.push_back(30); // 调用print函数输出 print(cout, my_deque); // 会输出 "10 20 30 " return 0; }
这样你的print函数就能正常输出deque内部的STL list内容啦!
内容的提问来源于stack exchange,提问作者Basiton Smith
相关产品推荐
相关产品推荐

