Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 是否有更多的结构/类用于更好的命名约定?_C++_Struct_Naming Conventions - Fatal编程技术网

C++ 是否有更多的结构/类用于更好的命名约定?

C++ 是否有更多的结构/类用于更好的命名约定?,c++,struct,naming-conventions,C++,Struct,Naming Conventions,我有如下输入数据 //road graph: from and to 1 2 1 3 3 4 3 5 //next festive city: type and city_id 2 5 2 3 1 3 2 3 2 4 到目前为止,我创建了1个struct来表示这两种输入类型 struct MainData{ int data; int data_1; }; int main() { /*code omitted*/ for(int i=0;i<n-1;i

我有如下输入数据

//road graph: from and to
1 2
1 3
3 4
3 5
//next festive city: type and city_id
2 5
2 3
1 3
2 3
2 4
到目前为止,我创建了1个struct来表示这两种输入类型

struct MainData{
    int data;
    int data_1;
};

int main()
{
    /*code omitted*/
    for(int i=0;i<n-1;i++){
        cin>> highWays[i].data >> highWays[i].data_1;
    }
    for(i=0;i<m;i++)
    {
        cin>>queries[i].data>>queries[i].data_1;
    }
    /*code omitted*/
}
struct MainData{
int数据;
int数据_1;
};
int main()
{
/*代码省略*/
对于(int i=0;i>高速公路[i]。数据>>高速公路[i]。数据_1;
}
对于(i=0;i>查询[i]。数据>>查询[i]。数据_1;
}
/*代码省略*/
}
依我看,我不认为这是一个好的做法,因为
data
data\u 1
的目的不清楚。虽然添加另一个结构可能会引入更大的文件。因此,我不知道是否要创建两个结构来区分这些输入类型,这会导致更好的命名约定。有什么建议吗

添加另一个结构可能会引入更大的文件

如果这有助于提高可读性,那么这是一个非常好的折衷办法。添加另一个
struct
以提高可读性不会增加编译程序的大小

struct
s主要是编译时工件。编译器使用它们来了解大小和字段偏移量。除非
struct
带有虚拟成员函数,否则添加新的
struct
不会增加程序的运行时占用空间。如果
struct
s完全不相关,则将它们分离出来不会对内存或CPU造成任何损失

当您的代码>结构> /Cux>S相关时,C++让您拥有两个世界中最好的:生成基类,从中派生,并提供具有描述性名称的成员函数:

class GraphEdge {
protected:
    int from;
    int to;
    GraphEdge(int f, int t) : from(f), to(t) {}
};

struct RoadEdge : public GraphEdge {
    int fromRoad() { return from; }
    int toRoad() { return to; }
    RoadEdge(int f, int t) : GraphEdge(f, t) {}
};

struct CityEdge : public GraphEdge {
    int fromCity() { return from; }
    int toCity() { return to; }
    CityEdge(int f, int t) : GraphEdge(f, t) {}
};
添加另一个结构可能会引入更大的文件

如果这有助于提高可读性,那么这是一个非常好的折衷办法。添加另一个
struct
以提高可读性不会增加编译程序的大小

struct
s主要是编译时工件。编译器使用它们来了解大小和字段偏移量。除非
struct
带有虚拟成员函数,否则添加新的
struct
不会增加程序的运行时占用空间。如果
struct
s完全不相关,则将它们分离出来不会对内存或CPU造成任何损失

当您的代码>结构> /Cux>S相关时,C++让您拥有两个世界中最好的:生成基类,从中派生,并提供具有描述性名称的成员函数:

class GraphEdge {
protected:
    int from;
    int to;
    GraphEdge(int f, int t) : from(f), to(t) {}
};

struct RoadEdge : public GraphEdge {
    int fromRoad() { return from; }
    int toRoad() { return to; }
    RoadEdge(int f, int t) : GraphEdge(f, t) {}
};

struct CityEdge : public GraphEdge {
    int fromCity() { return from; }
    int toCity() { return to; }
    CityEdge(int f, int t) : GraphEdge(f, t) {}
};

我认为这是一个非常明显的例子:您正在从文件中读取两个非常不同的元组。第一个列表包含带有源索引和目标索引的图形边,而第二个列表包含带有类型和ID的城市

您应该首先担心代码的可读性、可理解性和可维护性。编译器将能够进行大量优化;您不太可能从您正在考虑的过早优化中获得任何好处。因此,下面是@dasblinkenlight的好答案(在您向我们介绍数据结构的用途之前,他写了这篇文章),我建议使用两种不同的数据结构:

class GraphEdge {
protected:
    int from;
    int to;
    GraphEdge(int f, int t) : from(f), to(t) {}
};

class FestiveCity {
protected:
    int city_type; // This should probably be an enum
    int id;
    FestiveCity(int t, int i) : city_type(t), id(i) {}
};

我认为这是一个非常明显的例子:您正在从文件中读取两个非常不同的元组。第一个列表包含带有源索引和目标索引的图形边,而第二个列表包含带有类型和ID的城市

您应该首先担心代码的可读性、可理解性和可维护性。编译器将能够进行大量优化;您不太可能从您正在考虑的过早优化中获得任何好处。因此,下面是@dasblinkenlight的好答案(在您向我们介绍数据结构的用途之前,他写了这篇文章),我建议使用两种不同的数据结构:

class GraphEdge {
protected:
    int from;
    int to;
    GraphEdge(int f, int t) : from(f), to(t) {}
};

class FestiveCity {
protected:
    int city_type; // This should probably be an enum
    int id;
    FestiveCity(int t, int i) : city_type(t), id(i) {}
};

我们需要更多关于文件中的值实际上应该是什么意思的信息。在任何情况下,
data
data\u 1
都是非常无用的名称。如果文件行应该表示图形边缘,那么像
source
target
这样的名称如何?首先写清楚的、可维护的code。然后,当您完成配置文件并查看是否需要从此处更改内容时。您会惊讶于编译器可以用好的、易于理解的代码编写的优化量。@NathanOliver
编译器可以用好的、易于理解的代码编写的优化量
您能举个例子吗?不太好明白here@Bla...抱歉,我有一个拼写错误,意思是说编译器可以用好的、易于理解的代码进行大量优化。例如,
foo我们需要更多关于文件中的值实际含义的信息。在任何情况下,
data
data\u 1
都非常有用更少的名称。如果文件行应该表示图形边缘,那么像
源代码
目标代码
之类的东西怎么样?从编写清晰的、可维护的代码开始。然后当您完成配置文件并查看是否需要从那里更改内容时。您会惊讶于编译器可以用goo编写的优化数量d、 易于理解的代码。@NathanOliver
编译器可以用好的、易于理解的代码进行多少优化
你能举个例子吗?不太明白here@Bla...抱歉,我有一个拼写错误,意思是说编译器可以用好的、易于理解的代码进行大量优化
foo谢谢。但在我的情况下,后一种输入类型不是
from
to
,而是更像
type
city\u id
,请参阅更新的问题。因此,您上面的代码不适合我的需要。不过,谢谢您的建议。谢谢。但在我的情况下,后一种输入类型不是
from
to
>,但更像是
类型
城市id
,请参见更新的问题。因此,您上面的代码不符合我的需要。但是