2016-08-19 1 views
0

Ich habe Werte im Array gespeichert. Leere MYArray speichert die ID. Sobald diese Funktion alle IDs gespeichert hat, möchte ich dieses Array aufrufen, um zu überprüfen, ob eine Liste ein Teil dieses Arrays ist oder nicht. Zum Beispiel hat list Elemente/id {2,4,7} und Array hat Elemente/id {1,2,3,5,7,8}. Wie kann ich überprüfen, ob die Liste ein Teil des Arrays ist?Array übergeben und prüfen, ob die Liste ein Teil des Arrays in C++ ist

int CopmareArray(Node* node, int x[]) // func prototype 

int myarr[12]; 
int id=0; 
int myid; 

void MYArray(Node* node,........,int myarr[]){ 
............ // This function stores all the Ids in array 
........... 
    { 
    myid = nodeId; 
    id++; 
    } 
    myarr[id] = myid; 
} 

//This function takes the myarr[] as argument. Is this correct way to do so? 

int CopmareArray(Node* node, int x[]) { 
int a = 0, 
for (list<Node*>::iterator itr = Nodes.begin(); itr != Nodes.end(); ++itr){ 
//here i want to call my array if this list is part of my array then I want to return a = 1 other wise 0. But i dont know how to do this. 
+0

So hat jeder Knoten in 'Nodes' einem einzigen int-Wert hat? –

+0

Sprechen Sie darüber "für (Liste :: Iterator itr = Nodes.begin(); itr! = Nodes.end(); ++ itr)"? Es ist eine Liste mit Ids, sagen wir {2, 3,5}. keine doppelte ID – noman

+0

Ich habe dich mit einem Design versehen. Bitte gib ein [MCVE] an. Wir wissen nicht, wie Ihre Liste deklariert wurde. Sie sollten einen 'std :: vector' anstelle von' list' verwenden, wobei 'list' in C++ nicht genau seinen Namen bedeutet. –

Antwort

0

Sie müssen also ein bool (oder ein int wie gewünscht) deklarieren und dann als wahr (oder die 1) initialisieren. Dann müssen Sie Ihre Nodes für jeden Wert in int x[] iterieren, sobald einer der Werte in int x[] nicht in ist, dann ändern Sie diese bool zu false (oder 0). Sobald die Iteration int x[] beendet ist, geben Sie das Bool (oder das Int) zurück.

Sie können es auf diese Weise tun:

bool YourBoolHere = true; // or int = 1 
for(unsigned int xElement = 0; a < sizeof(x)/sizeof(x[0]); xElement = xElement + 1) 
{ 
    for (list<Node*>::iterator itr = Nodes.begin(); itr != Nodes.end(); ++itr) 
    { 
     if(x[xElement] != itr->YourInNodeValueHere) 
      YourBoolHere = false; // or 0 
    } 
} 

return YourBoolHere; 
+0

Ich hatte es versucht, wie diese bcz Ich muss überprüfen, ob Liste ist Teilmenge von Array dann zurück wahr oder 1 ..... aber mein Array wird nicht aufgerufen. Ich habe cout verwendet, aber es zeigt mir immer 0. für (list :: iterator itr = Knoten.begin(); itr! = Knoten.end(); ++ itr) { für (unsigned int j = 0; j ! Id = x [j]) \t cout <<“ID "<<(*itr)-> Id <<" print Array "<< x [j] << endl; Rückgabe a = 0; \t \t \t \t} zurück r = 1; } – noman

+0

Es tut mir leid, dass ich verwirrt "validiere Liste im Array" mit "validate Array in der Liste". Ich habe jetzt keinen Compiler, aber Sie haben die Idee. Welchen Wert von x sehen Sie beim Debuggen und Überspringen Ihrer Loops? Oder gib mir etwas Zeit –

+0

Vielen Dank für Ihre Hilfe. Eigentlich hatte ich diesen Code ausprobiert, aber ich war mir nicht sicher, ob das richtig ist oder nicht, deshalb habe ich meine Frage hier gestellt. Wenn die Liste {2,3,4} im Array {1, 2,3, 4,5, 7} ist, dann true zurück. Zweite Sache über x, es zeigt mir immer 0. Obwohl ** void MYArray ** speichert die Werte. Ich denke, es gibt ein Problem mit Array als Argument. – noman

Verwandte Themen