Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.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++_Arrays_Dynamic_Linked List - Fatal编程技术网

C++ 如何将动态数组中的数组指向某个对象?

C++ 如何将动态数组中的数组指向某个对象?,c++,arrays,dynamic,linked-list,C++,Arrays,Dynamic,Linked List,我有一个结构,如下所示: struct Key_Node { int key; struct Package_Node *next_package; }; 我将创建一个动态数组“struct Key\u Node arrayMain[X]”,其中用户将输入X的值,并根据该值创建动态数组 由于我不知道数组的大小,显然我无法将动态数组的每个指针指向某个对象。那么我在这里要做什么呢 我有另一个类似这样的struct struct Package_Node { int bar_

我有一个
结构
,如下所示:

struct Key_Node
{
    int key;
    struct Package_Node *next_package;
};
我将创建一个动态数组“
struct Key\u Node arrayMain[X]
”,其中用户将输入
X
的值,并根据该值创建动态数组

由于我不知道数组的大小,显然我无法将动态数组的每个指针指向某个对象。那么我在这里要做什么呢

我有另一个类似这样的
struct

struct Package_Node
{
    int bar_code;
    float package_weight;
    struct Package_Node *next_packaged;
};
Key\u节点主数组[dynamicvalue]

package\u节点totalPackages[dynamicvalue]


是按顺序排列的动态数组和链表。我将创建随机包,并使用哈希表方法对它们进行排序。如果我的
X
是3,而我的随机条形码是10,我将执行
10%3
,结果是1,因此随机
package\u节点将添加到
mainArray[1]
,列表将像那样增长。

看来您需要一些帮助才能开始。看起来您被要求实现一个。在
C
中使用
malloc
分配动态存储,在
C++
中使用
new
,请参阅

这应该会让你开始,希望能有所帮助

#include <iostream>
struct Key_Node
{
    int key;
    struct Package_Node *next_package;
};

struct Package_Node
{
    int bar_code;
    float package_weight;
    struct Package_Node *next_packaged;
};

int main() {
    size_t X;
    std::cout << "Enter X: ";
    std::cin >> X;
    Key_Node *mainArray = new Key_Node[X];

    for(size_t i=0; i<X; ++i) {
        mainArray[i].next_package = NULL;
    }

    //-- Rest of your program goes here

    delete [] mainArray;

    return 0;
}
#包括
结构键节点
{
int键;
结构包\节点*下一个\包;
};
结构包节点
{
int条码;
浮箱重量;
结构包节点*下一个包;
};
int main(){
尺寸X;
std::cout>X;
Key_节点*mainArray=新Key_节点[X];

对于(size_t i=0;i好的,我想我能理解,但我可能离得太远了

重要提示:这是C++,但我不能确定你实际上并没有使用C(这更复杂)。到目前为止你所发布的代码和你想执行的任务感觉像C.< 首先,快速介绍链接列表。它们有一个“head”元素,然后每个元素指向列表中的下一个元素:

struct Item {
    Item *next;
    // data here
};

struct ItemList {
    Item *first;
};

ItemList myList;
myList.first = new Item( );
myList.first->next = new Item( );
myList.first->next->next = new Item( );
这是一种设置链表的愚蠢方法,但演示了其结构;我们通过逐个遍历每个元素来查找节点

您需要一个使用链接列表的哈希表(根据我收集的数据)。这意味着您将拥有一个固定长度的链接列表数组,并能够向其中添加项目:

struct Item {
    Item *next;
    int key;
    int something;
};

struct ItemList {
    Item *first;
};

const int NUM_BUCKETS = 3;

ItemList keys[NUM_BUCKETS];

Item *addItemKey( int key, Item *o ) {
    int index = key % NUM_BUCKETS;
    if( keys[index].first != NULL ) {
        o->next = keys[index].first;
    }
    o->key = key;
    keys[index].first = o;
    return o;
}

int main( ) {
    Item *myItem1 = addItemKey( 10, new Item( ) );
    myItem1->something = 7;
    Item *myItem2 = addItemKey( 5, new Item( ) );
    myItem2->something = 3;
}
那么这有什么用呢?addItemKey会把你给它的东西放到一个“桶”里如果已经存在一个项目,它会将其推送到第二个项目。它还会返回该项目作为一种方便。了解这里发生的事情很重要,所以请花一些时间来处理我在本文末尾链接到的示例

要从键中查找项,必须再次计算索引并循环相应的列表,直到其中一项匹配:

Item *findItemKey( int key ) {
    int index = key % NUM_BUCKETS;
    Item *test = keys[index].first;
    while( test != NULL ) {
        if( test->key == key ) {
            return test;
        }
        test = test->next;
    }
    return NULL;
}

int main( ) {
    // set up the items as before here

    Item *myFoundItem = findItemKey( 10 );
    if( myFoundItem != NULL ) {
        cout << myFoundItem->something << endl; // should say 7 with the code above
    }
}
Item*findItemKey(int键){
int index=键%NUM\u bucket;
Item*test=键[索引]。首先;
while(test!=NULL){
如果(测试->键==键){
回归试验;
}
测试=测试->下一步;
}
返回NULL;
}
int main(){
//如前所述在此处设置项目
项目*myFoundItem=findItemKey(10);
如果(myFoundItem!=NULL){

您是否需要结构的另一个元素,类型为
std::size\u t
,用于存储数组的长度。您实际上想在这里实现什么?这个“下一个\u包”是什么?为什么不使用std::vector而不是C样式的数组?当然,这个问题的答案很有可能是由对的答案隐式给出的。@Dave:@Johnysweb:啊,我不知道。user2086751:对不起,忽略家庭作业标记位。我已经过时了!你能用更多的上下文更新你的问题吗?你更可能会得到答案这样的答案。(我所说的上下文是指更多的代码或更好地解释您期望它如何工作)