繁体   English   中英

我可以在结构中放一个列表吗?

[英]Can I put a list in a struct?

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

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

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

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

我建议你使用std::vectorstd::array而不是C风格的数组。 如果你的数组应该是动态大小的话, std::vector可能是最有用的。 如果你使用普通的new或甚至malloc() ,你的对象将不会被自动释放(甚至没有用malloc()初始化)

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

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

B) struct继承默认是公共的(即struct A : B等同于class A : public B ,其中Bclass 。)

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

默认构造函数是必需的,因为首次声明struct变量时,它也会被初始化。 其中的任何对象也将通过调用默认构造函数进行初始化。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM