我目前正在尝试为我的结构向量创建overload operator<<
,这样我将以矩阵格式打印向量的内容。
这是我到目前为止所尝试的
// This file is a "Hello, world!" in C++ language by GCC for wandbox.
#include <iostream>
#include <cstdlib>
#include <vector>
#include <algorithm>
struct element
{
std::vector<int> keys;
std::string item;
element(std::vector <int> key, std::string item)
{
keys = key;
this->item = item;
}
};
inline std::stream operator << (std::ostream &stream, const std::vector<element*> _element)
{
for (auto elements: _element)
{
for(auto item : elements)
{
std::stream << item.key << " "
}
}
}
int main()
{
std::cout << "Hello, Wandbox!" << std::endl;
std::vector<element> storage;
std::vector<int> test(10);
std::generate(test.begin(), test.end(), []() {
return rand() % 100;
});
std::string name = "test";
storage.push_back(element(test,name));
std::generate(test.begin(), test.end(), []() {
return rand() % 100;
});
storage.push_back(element(test,name));
std::generate(test.begin(), test.end(), []() {
return rand() % 100;
});
storage.push_back(element(test,name));
std::vector<element*> copy_of_storage;
for(auto elements: storage)
{
copy_of_storage.push_back(&(elements));
}
std::cout << copy_of_storage << std::endl;
}
但由于某种原因它无法正常工作,似乎无法理解出现了什么问题?
答案 0 :(得分:1)
您的运营商&lt;&lt;。
中存在许多错误首先,你的返回类型应该是std :: ostream&amp;因此你必须返回流。在你的第二个循环中:
for(auto item : elements)
元素是元素的指针(向量的值类型),因此您无法迭代其他元素,您可能想要迭代其他元素 - &gt;键
这是你的固定功能:
inline std::ostream& operator<< (std::ostream &stream, const std::vector<element*> _element)
{
for (auto elements: _element)
for(auto item : elements->keys)
stream << item << " ";
return stream;
}
答案 1 :(得分:1)
您可以采取一些措施来修复代码示例 - 更好的命名约定将是一个重要的开始。
您的代码无效的原因是您的运营商&lt;&lt;功能。以下内容适用:
std::ostream& operator << (std::ostream &stream, std::vector<element*> _elements)
{
for (auto element : _elements)
{
for(auto item : element->keys)
{
stream << item << " ";
}
}
return stream;
}
您的工作示例:https://wandbox.org/permlink/FVXbLlXEAJpVbfAx
此外:
operators <<
参数列表中,您可以从const
中删除std::vector<element*>
,因为它是包含非常量指针的向量的副本。