我正在尝试使用列表作为结构的一部分,因为我们的产品有多种颜色。这是我可以做的一些事情,还是我应该使用数组?无论哪种方式,我都没有在网上找到任何例子。
#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;
}
答案 0 :(得分:2)
是的,这可以做到。感谢RAII,list
对象将根据结构的生命周期自动初始化和释放。请注意,即使在其他编程语言(如Object Pascal)中也不是这种情况,struct
和class
在C ++中实际上是相同的,唯一的区别是成员方法和变量的默认可见性,正如其他答案所指出的那样。
你不能把非PODS对象放入工会。
我建议您使用std::vector
或std::array
而不是C风格的数组。如果您的数组应该是动态大小,那么std::vector
可能最有用。如果您使用普通new
甚至malloc()
,那么您的对象将不会自动释放(甚至不会使用malloc()
进行初始化)
答案 1 :(得分:2)
是的,没有理由不这样做。 C ++中struct
和class
之间的唯一区别是
A)struct
成员默认是公开的,
B)默认情况下struct
继承是公开的(即,struct A : B
相当于class A : public B
,其中B
是class
。)
答案 2 :(得分:1)
只要对象具有或支持默认构造函数,在结构内部使用列表或任何对象是完全可以接受的。
默认构造函数是必需的,因为首次声明struct变量时,它也会被初始化。其中的任何对象也将通过调用默认构造函数来初始化。
答案 3 :(得分:1)
在C ++中将类的实例作为结构的成员没有任何问题,除非您依赖于C ++将结构的实例视为POD(普通旧数据)对象。 (比如逐位复制等等。