当前位置: 首页 > 知识库问答 >
问题:

为什么C++在定制结构向量时有ostream重载问题?

江烨伟
2023-03-14

但是,迭代适用于char类型的向量

#include<iostream>
#include<list>
#include<vector>
#include<stdio.h>

using namespace std;

struct traits
{
    int x;
    bool visit;
    std::list<int> friends;
};

int main()
{
    cout << "Enter the number of employees: " << endl;
    int noOfEmployees, noOfFriends;
    cin>>noOfEmployees;
    std::vector<traits> employees;
    int i = 0; int j;
    while(noOfEmployees--){
        traits v;
        v.x = i;
        cout << "Enter the no of friends: " << endl;
        cin >> noOfFriends;
        while(noOfFriends--){
            cin>>j;
            v.friends.push_back(j);
        }
        v.visit = false;
        employees.push_back(v);
    }

    std::vector<char> path;
    path.push_back('a');
    path.push_back('l');
    path.push_back('i');
    path.push_back('a');
    for (std::vector<char>::const_iterator i = path.begin(); i != path.end(); ++i){
        std::cout << *i << ' ';
    }
    for(std::vector<traits>::iterator v = employees.begin(); v != employees.end(); ++v){
        std::cout<<*v<<endl;
    }
}

我看到的答案很少,但我想在没有操作符重载的情况下做到这一点,什么是正确的或更多的C++-NIC方式?

共有1个答案

曾嘉祯
2023-03-14

您得到的错误是告诉您ostream操作符没有应用于trait类型对象的规则。做到这一点的最“C++NIC”方法是重载<<运算符,但您已经说过您不想这么做。

给定这个约束,您可以将traits项转换为ostream操作符支持的内容。一种合理的方法是使用命名空间级别的非成员函数

std::string to_string(const traits& t) {
/// Code to generate a string representation of your traits object
}
for (const auto emp& : employees){
    std::cout<< to_string(emp) << ' ';
}

如果我在生产中看到这样的代码,我会认为作者有理由不使用更规范的运算符重载,如果他们不使用,我会感到失望。

 类似资料:
  • 在C++中,函数的签名部分取决于它是否为常量。这意味着一个类可以有两个具有相同签名的成员函数,只是一个是const而另一个不是。如果您有一个这样的类,那么编译器将根据您调用它的对象来决定调用哪个函数:如果它是类的常量实例,则调用函数的常量版本;如果对象不是常量,将调用其他版本。 在什么情况下,您可能希望利用此功能?

  • 我试图创建一个图,它将有V个顶点。我正在使用向量的向量来表示图(作为邻接列表)。我的图中的节点是从0到V-1的编号,所以adj向量的索引代表了节点的数量。除非我搞错了,adj[u]代表一个向量,所以我应该可以使用adj[u].push_back(v)将顶点v推入顶点u的邻接列表中。所以在我的例子中,adj[4]应该得到与节点4相邻的顶点所在的向量,而.push_back(1) 这不会发生的。我想这

  • 我是C语言的新手,正在尝试根据另一个向量中的值对向量进行排序。我试图通过创建结构向量并使用STL对结构向量进行排序来实现这一点。结构有两个数据项,一个是CustomType,另一个是int。我希望按int字段的降序排序,因此包含一个布尔运算符重载,以便能够使用STL排序(算法)。 在函数中使用对CustomType向量和初始未初始化的int向量的引用构造结构,并将它们组合成结构向量。int的值是通

  • 完整代码如下所示: 在以下部分中 如果返回类型为ostream,则会显示一条红线。我不确定返回类型与ostream有什么区别 *作为参考,我忘了返回操作系统,所以我编辑了这篇文章

  • 下面是我接手的一个项目,我想安装一个三方库才发现没有package.json,我装上以后node_modules会更新,现在的这4个依赖都整没了,之前没有发现这个问题,这种结构为什么没有package.json。我想用三方库怎么办?

  • 我正在尝试为重定向绑定创建SAML AuthnRequest。 这是我的(匿名)授权请求: 我有一个中继状态: SigAlg是http://www.w3.org/2001/04/xmldsig-more#rsa-sha256 我对请求进行放气,然后进行base64编码,然后进行URL编码。(缩小后的base64编码结果在SAMLTool解码器中检出。) 用于创建签名的结果字符串如下所示: 我尝试使