使用指针创建动态分配的数组来构造C ++

时间:2015-11-19 21:56:35

标签: c++ arrays pointers struct

所以我目前有一个简单的结构(链表)我将在HashMap中使用:

struct Node {
    std::string key, value;
    Node* head;
}

我目前正在尝试使用指向每个结构的指针动态分配数组。这就是我现在所拥有的......

Node* nodes = new Node[100]

据我所知,这会将100个节点的数组分配到内存中(稍后我将不得不删除);然而,在迭代尝试横向这些节点(我实现为链表)...

for (int x = 0; x < 100; x++) {
    Node current = nodes[x]; // Problem is I wanted an array to node pointers. This is not a pointer.
    while (current != nullptr) { // this isn't even legal since current is not a pointer.
        // DO STUFF HERE
        current = current.next; // This is not a pointer access to a method. I'm looking to access next with current->next;
    }
}

希望我足够清楚。有人可以如何为结构分配动态指针数组?到目前为止,我能够动态分配一个结构数组,而不是一个指向结构的指针数组。

2 个答案:

答案 0 :(得分:2)

有两种方法。您可以分配一个结构数组并引入另一个指针,该指针将指向数组中将扮演头部角色的元素。

例如

import React from 'react';
import PureRenderMixin from 'react-addons-pure-render-mixin';
import {connect} from 'react-redux';
import Winner from './Winner';
import Vote from './Vote';

export const Voting = React.createClass({
  mixins: [PureRenderMixin],
  render: function() {
    return <div>
      {this.props.winner ?
        <Winner ref="winner" winner={this.props.winner} /> :
        <Vote {...this.props} />}
    </div>;
  }
});

function mapStateToProps(state) {
  return {
    pair: state.getIn(['vote', 'pair']),
    winner: state.get('winner')
  };
}

export const VotingContainer = connect(mapStateToProps)(Voting);

(在这种情况下,head指向节点[0])

在不需要列表后,您必须使用operator

删除它
Node *head = nodes;

或者您确实可以像这样

分配一个指向数组的指针数组
delete [] nodes;

但在这种情况下,数组的每个元素依次应该是指向动态分配对象的指针;

要删除列表,首先必须删除数组元素所指向的每个对象,例如在循环中

Node **nodes = new Node *[100];

然后删除数组本身

for ( int i = 0; i < 100; i++ ) delete nodes[i];

最好在分配数组时用零初始化数组的每个元素

delete [] nodes;

答案 1 :(得分:0)

我建议你这个结构:

class myList {

struct Node {
string value;
Node* next;
}

/*Public methods .. Add/Set/Get/Next/isEmpty.. etc ... */
Node* head, *tail;
};

主要: myList* lis = new myList[number]; 那么你有多少名单!并且通过方法和运算符完成所有工作,例如,如果您希望下一个节点只调用lis[0].getNext(); 如果你想跳过当前节点做lis[0].Next(); ......等..

这是如何工作的,你尝试做的就像是C程序!