Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.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++_Visual Studio 2010_Struct - Fatal编程技术网

C++ 我可以在结构中放置列表吗?

C++ 我可以在结构中放置列表吗?,c++,visual-studio-2010,struct,C++,Visual Studio 2010,Struct,我试图使用列表作为结构的一部分,因为我们的产品有多种颜色。这是我可以做的事情,还是应该使用数组?不管怎样,我都没有在网上找到任何例子 #include "stdafx.h" #include<iostream> #include<string> #include<sstream> #include<cctype> #include<list> using namespace std; /////////////////

我试图使用列表作为结构的一部分,因为我们的产品有多种颜色。这是我可以做的事情,还是应该使用数组?不管怎样,我都没有在网上找到任何例子

#include "stdafx.h"
#include<iostream>  
#include<string>  
#include<sstream>  
#include<cctype> 
#include<list>

using namespace std;

////////////////////////////////////////////////////////////////////////////////////////
//  Constances
////////////////////////////////////////////////////////////////////////////////////////

#define N_PRODUCT 3

struct Brand_t {
int Model_Num;
string Product_Name;
list<string> Colors;
} brands [N_COLOR];

////////////////////////////////////////////////////////////////////////////////////////
//  Functions
////////////////////////////////////////////////////////////////////////////////////////


int main()
{
string mystr;
int n;

for (n=0; n < N_PRODUCT; n++)
{
    cout << "Enter Model Number: ";
    std::getline (cin,mystr);
    stringstream(mystr) >> brands[n].model_Num,4;
    cout << "Enter Product Name: ";
    getline(cin,classrooms[n].Product_Name);
    list<string>::iterator it;
    Students.push_back ("Red");
    Students.push_back ("Yellow");
    Students.push_back ("Blue");
}

return 0;
}
#包括“stdafx.h”
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
////////////////////////////////////////////////////////////////////////////////////////
//康斯坦斯
////////////////////////////////////////////////////////////////////////////////////////
#定义N_产品3
结构品牌{
int-Model_-Num;
字符串产品名称;
列出颜色;
}品牌[N_颜色];
////////////////////////////////////////////////////////////////////////////////////////
//功能
////////////////////////////////////////////////////////////////////////////////////////
int main()
{
字符串mystr;
int n;
对于(n=0;n品牌[n]。型号,4;

cout在结构内部使用列表或任何对象是完全可以接受的,只要该对象具有或支持默认构造函数


默认构造函数是必需的,因为当第一次声明结构变量时,它也会初始化。其中的任何对象也会通过调用默认构造函数来初始化。

是的,这是可以完成的。由于RAII,
列表
对象将根据您的生命周期自动初始化和释放注意,即使在其他编程语言(如对象Pascal)中,这不是这样的情况,但是 >结构> <代码>和<代码>类<代码>在C++中是完全相同的,唯一的区别是成员方法和变量的默认可见性,正如其他答案所指出的。 但是,您不能将非对象放入联合中


我建议您使用
std::vector
std::array
而不是C样式的数组。如果您的数组应该是动态大小的,则
std::vector
可能最有用。如果您使用纯
new
或甚至
malloc()
,则不会自动释放对象(甚至未用<代码> MalCube()/代码>初始化)

< P>是的,没有理由不这样做。C++中的<代码>结构> <代码>和<代码>类< /代码>之间的唯一区别是

A)
struct
成员在默认情况下是公共的,并且


B) 默认情况下,
struct
继承是公共的(即,
struct A:B
相当于
class A:public B
,其中
B
class
)在C++中,将类的实例作为结构体的成员没有任何错误,除非你依赖C++将结构实例作为POD(普通的旧数据)对象来处理。(比如,用位拷贝等,

),除非你动态分配它,否则数组也会自动清理。注意:你可以(在C++ 11中)将非POD放入工会,即使我不建议这样做(您必须手动控制对象的生存期,根据需要调用构造函数和析构函数来更改联合中的活动成员…痛苦。也称为RAII。回答得好,欢迎使用StackOverflow。如果给结构一个带有初始值设定项列表的构造函数,它可以包含不可默认共构的对象。This在两个方面是不正确的:
struct
相当于
class
,但有一个默认的访问说明符
public
,因此可以在
类中执行的任何操作都可以在
struct
中执行。即使只考虑聚合(即没有构造函数),您可以存储没有默认构造函数的对象。这将强制您类型的所有用户使用聚合初始化,但这是可以做到的。@Drise:我不确定您的评论是什么意思,这个答案中提到的RAII概念在哪里?RAII与答案完全无关。@DavidRodríguez dribeas,除非我大错特错了,“…首先声明结构变量,然后对其进行初始化。”如果我错了,请纠正我。在C++中,结构是一个类,它包含一个隐含的公共:在顶部。但是对于代码可读性,如果只使用数据,所有成员都是公共的。有时我会添加一个构造函数,可能是一个析构函数,但是没有其他的方法。但是如果你对访问是明确的,那么语言就不关心。列表vs.数组是一个非常奇怪的交易。f、 向量和数组,当然,但是列表有完全不同的性能特征;如果您确实需要一个列表,并且由于某种原因不能使用std::list(这是非常罕见的),你可能会用一个C样式的链表代替,而不是一个C样式的数组。我想我已经找出了它说的应该是颜色的地方可能有什么错。当我把这些放在一起时,我从不同的例子中选取了一些,但我想应该是brands[n].Colors.push_back(“红色”);你永远不应该假设一个对象是一个POD。总是在编译时检查。+1指出第二个区别,我没有意识到这一点。