gpt4 book ai didi

c++ - 嵌套结构和数组 C++

转载 作者:行者123 更新时间:2023-11-30 04:02:37 24 4
gpt4 key购买 nike

你好,我正在处理 C++ 中的嵌套结构和数组,这里是一些背景信息:

 struct Cells // a collection of data cells lines 

cells :: [Cell] // the cells: a location and a value

nCells :: Integer // number of cells in the array

capacity :: Integer // maximum size of the array end



struct Cell
location :: int // a location of data cells lines
value :: int // the value end Cells

我拥有的无法编译的代码(3 个文件、 header 、ADT 实现、主要文件)我如何在结构数组中声明嵌套结构错误?

// Defines the  cell.h ADT interface
struct Cell;
struct Cells;


struct Cells {
Cell cells[];
int nCells;
int capacity;
};

struct Cell {
int location;
int value;
};

//fill cells with random numbers
void initialize(Cells *rcells);

ADT 实现

using namespace std;

#include <iostream>
#include <cstdlib>
#include "cell.h"

void initialize(Cells *rcells){
for(int i = 0 ; i < rcells->nCells; i++)
{
rcells->cells[i].location = rand() % 100;
rcells->cells[i].value = rand() % 1000;
}
}

主要

using namespace std;

#include <iostream>
#include <cstdlib>
#include "cell.h"

int main(){
Cells *c;
c->cells[0].location=0;
c->cells[0].value=0;
c->cells[1].location=0;
c->cells[1].value=0;
c->nCells = 2;
c->capacity = 2;
initialize(c);
}

最佳答案

您的原始声明失败,因为在

struct Cells {
Cell cells[];
int nCells;
int capacity;
};

以这种方式定义的“单元格”是一个数组,它应该具有固定大小(除非它是最后一个成员并且您使用的是 C99 标准)。你可能认为它和

一样
Cell* cells 

但在结构定义中不会自动转换为指针类型。

做这些事情的C++方法是

typedef std::vector<Cell> Cells;

你的初始化函数可以是

void initialize(int ncell, Cells& cells) {
cells.resize(ncell);
for (Cell& cell : cells)
{
cell.location = rand() % 100;
cell.value = rand() % 1000;
}
}

你的主程序应该稍微改变一下

int main(){
Cells c;
initialize(2, c);

c[0].location=0;
c[0].value=0;
c[1].location=0;
c[1].value=0;
}

如果你想要细胞计数信息,你可以调用

c.size()

不需要capacity变量,因为cell总数没有上限。

顺便说一句,这不是人们通常所说的嵌套结构。当有人说嵌套结构时,他通常指的是嵌套结构定义。包含其他对象的对象没有什么特别之处。

关于c++ - 嵌套结构和数组 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24986803/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com