所以我使用像这样的结构数组:
struct node
{
char* name;
int value;
};
node *nodeArray = new node*[50];
我试图从数组中调用一个函数,这样我就可以搜索这样的元素:
struct node* newNode;
newNode = nodeArray->find(name);
如果name是char *,那么一旦找到名称,它就会返回指向数组中节点的指针。
我如何创建一个类来从数组中调用find函数?
答案 0 :(得分:-1)
如果你坚持使用节点数组类,这就是我解决它的方法。
请注意,我假设node
的声明与原始帖子相同。
#include <vector>
class NodeArray
{
public:
explicit NodeArray(size_t length)
: nodes_(length)
{}
Node* find(const char* name){
for (size_t i = 0; i != nodes_.size(); ++i){
if (0 == strcmp(nodes_[i].name, name)){ // strcmp is not pretty though.
return &(nodes_[i]);
}
}
return NULL;
}
// TODO: add methods for filling/accessing the nodes..
private:
std::vector<node> nodes_;
};
int main()
{
NodeArray my_nodes(50);
// do stuff
node* some_node = my_nodes.find("some");
if (some_node) { /* ... */ }
}
答案 1 :(得分:-1)
你可以使用这个小&#34; hack&#34;。它会起作用,因为NodeArray
没有数据成员且没有虚函数,因此您只需将第一个node
地址转换为指向NodeArray
的指针并调用find
函数。 Find函数将第一个节点地址作为this
指针。
#include <cstring>
#include <iostream>
struct node
{
char* name;
int value;
};
class NodeArray {
public:
node* find(const char* name, int len) {
node* current = (node*)this;
for (int i = 0; i < len; current++) {
if (current->name && !strcmp(current->name, name)) return current;
}
return nullptr;
}
node* get(int index) {
return ((node*)this) + index;
}
};
int main(int argc, char * argv[]) {
NodeArray* node_array = (NodeArray*) (new node[50]);
node_array->get(10)->name = "blabla";
if (node_array->find("blabla", 50)) {
std::cout << "FOUND!";
}
delete [] ((node*)node_array);
return 0;
}