3

由于我们的产品有多种颜色,我正在尝试将列表用作结构的一部分。这是我可以做的事情还是应该只使用数组?无论哪种方式,我都没有在网上找到任何示例。

#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;
}
4

4 回答 4

2

是的,这是可以做到的。多亏了 RAII,list对象将根据结构的生命周期自动初始化和释放。请注意,即使在其他编程语言(如 Object Pascal)中并非如此,struct并且class在 C++ 中实际上是相同的东西,唯一的区别是成员方法和变量的默认可见性,正如其他答案所指出的那样。

但是,您不能将非PODS对象放入联合中。

我建议您使用 astd::vector或 astd::array而不是 C 样式的数组。如果您的数组应该是动态大小的, Astd::vector可能最有用。如果您使用 plainnew或 even malloc(),那么您的对象将不会被自动释放(甚至不会用 初始化malloc()

于 2012-07-03T21:25:29.600 回答
2

是的,没有理由不这样做。C++ 中astruct和 a之间的唯一区别是class

A)struct成员默认是公开的,并且

B)struct默认情况下继承是公共的(即,struct A : B相当于class A : public Bwhere Bis a class。)

于 2012-07-03T21:25:30.380 回答
1

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

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

于 2012-07-03T21:24:50.987 回答
1

将类的实例作为 C++ 中结构的成员没有任何问题,除非您依赖 C++ 将结构的实例视为 POD(普通旧数据)对象。(例如按位复制等。

于 2012-07-03T21:26:22.887 回答