如何在C++中打印queue<vector>队列中的元素?
如何打印队列中存储的vector元素
C++标准库没有为std::vector提供直接的std::ostream输出重载,所以你不能直接用cout << chains.front()来打印vector。下面提供两种可行的解决方案:
方法一:直接遍历vector元素
在队列循环中,取出每个vector后,逐个遍历其内部的string元素并输出:
首先修正原代码的两处小问题:string end = "hog"末尾缺少分号,且原代码漏了<string>头文件(std::string需要该头文件支持)。修改后的完整代码如下:
#include <iostream> #include <vector> #include <queue> #include <string> using namespace std; int main() { string start = "cat"; string end = "hog"; // 补上分号 queue<vector<string>> chains; vector<string> init; init.push_back(start); chains.push(init); while (!chains.empty()) { const vector<string>& current_chain = chains.front(); // 遍历vector中的每个字符串 for (const string& word : current_chain) { cout << word << " "; } cout << endl; chains.pop(); } return 0; }
方法二:重载ostream输出运算符
如果需要频繁打印vector,可以全局重载<<运算符,之后就能像打印基础类型一样直接输出vector:
#include <iostream> #include <vector> #include <queue> #include <string> using namespace std; // 重载vector<string>的输出运算符 ostream& operator<<(ostream& os, const vector<string>& vec) { for (size_t i = 0; i < vec.size(); ++i) { if (i != 0) { os << " "; // 元素间添加分隔符 } os << vec[i]; } return os; } int main() { string start = "cat"; string end = "hog"; queue<vector<string>> chains; vector<string> init; init.push_back(start); chains.push(init); // 现在可以直接cout输出vector了 while (!chains.empty()) { cout << chains.front() << endl; chains.pop(); } return 0; }
两种方法都能实现你的需求,方法二更适合需要多次打印vector的场景,代码更简洁。
内容的提问来源于stack exchange,提问作者Carla M
相关产品推荐
相关产品推荐

