Frage

Ich habe einige Vektoren der Klasse A-Objekte:

 std::vector<A> *V1;
 std::vector<A> *V2;

etc

gibt es eine Funktion mit einem Vektor von Zeigern von A:

 std::vector<A *> *arranged;

, was ich tun muß gesetzt wird, um die Vektoren, die von V1, V2 usw. ohne innen angeordnet sie am Ende zu zerstören, also dachte ich, dass ein Vektor von Zeigern auf diese Objekte ... ist das möglich? Wenn ja, können Sie mir ein Beispiel für eine Iteration mit variabler V1 geben und Zeiger dieser Objekte in angeordnet hinzufügen?

vorstellen, dass Sie, temporarly, 3 Vektoren von Objekten in einem Vektor sortieren müssen, aber Sie wollen nicht die Erinnerung an die drei Vektoren zu vermasseln.

ty,

Joe

War es hilfreich?

Lösung

Sie können Ihren eigenen Komparator schreiben. In diesem Fall würde der Komparator auf A* arbeiten. Ein einfaches Beispiel mit int Typ:

void fun(vector<int*>* vec)
{
  /////////
}

bool comp(int* lhs, int* rhs)
{
    return *lhs < *rhs;
}

int main()
{
    vector<int> first, second;
    vector<int*> vec;

    for(vector<int>::size_type i = 0; i < first.size(); ++i)
        vec.push_back(&first[i]);
    for(vector<int>::size_type i = 0; i < second.size(); ++i)
        vec.push_back(&second[i]);

    // write your own comparator! provided above: comp
    sort(vec.begin(), vec.end(), comp);

    fun(&vec);

    return 0;
}

Andere Tipps

Wenn ich Sie richtig verstanden - man mehrere Vektoren haben einige Objekttyp (A) enthält, und Sie wollen einen neuen Vektor, der die Zusammensetzung aller Mitglieder der anderen Vektoren erstellen enthält w / o tatsächlich die Objekte kopieren um, oder sonst in irgendeiner Weise ihre besitz-Vektoren zu stören?

Erstens: Hat das neue Leben des zusammengesetzten Vektors auf jeden Fall solche bestehen, dass keine seiner Source-Vektoren ändern? Das heißt:. Sie nicht nur rohe Zeiger in die Source-Vektoren aus dem zusammengesetzten Vektor haben können, wenn diese Zeiger innerhalb der Lebensdauer des Verbunds für ungültig erklärt werden

Wenn die Antwort auf, dass etwas anderes als ist „auf jeden Fall, Zeiger gültig bleiben“, dann müssen Sie mit gemeinsamen Zeigern betrachten, oder etwas ähnliches, so dass die Quelle-Vektoren zu verändern nicht Ihren zusammengesetzten Vektor in einem ungültigen Zustand verlassen (dh es ist nicht zu verlassen, um zufälligen Speicher zeigt).

Unter der Annahme, dass die Source-Vektoren in Bezug auf ihre eigenen Inhalte für die Lebensdauer Ihrer Composite unverändert bleiben, dann ist die einfache Antwort ist „Ja“

vector<A> source1;
vector<A> source2;
vector<A> source3;

vector<const A*> composite; // this is a sorted vector of the above vectors' contents (by pointer)

Für den zusammengesetzten Vektor, müßten Sie die Inhalte setzen (kopieren) von source1-3 hinein, und es dann sortieren (oder Sie können einen sortierten Behälter verwenden, und zu sortieren, wie Sie die Elemente einfügen). Sie müssen Ihren eigenen Sortier Operator definieren, eine, die die Zeiger dereferenziert und gilt unabhängig von Art-Algorithmus auf den Zielobjekte selbst.

Hilft Ihnen?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top