Wie verkette ich zwei std::vector
s?
Ihre Beschreibung ist nicht klar (und nutzlos, sorry). Ansonsten könnte Ihre Antwort vollständiger sein, wenn Sie eine zweite Lösung hinzufügen, die die Verkettung in einem anderen Vektor speichert, anstatt einen von ihnen zu ändern.
10 Stimmen
Die gegebenen Antworten sind nicht wirklich zusammenhängend. Sie fügen eine Kopie an. Es könnte (aus Gründen der Effizienz) sinnvoll sein, eine std::vector concatenate-Methode zu erstellen, allerdings würde dies eine ausgeklügelte gemeinsame Nutzung der Verwaltung der Knoten erfordern, und das ist wahrscheinlich der Grund, warum dies noch nicht geschehen ist.
16 Stimmen
@FauChristian: Nein, unter Effizienzgesichtspunkten kann es keinen Nutzen geben. Der Vektorspeicher muss kontinuierlich sein, also ist das, was Sie vorschlagen, unmöglich. Wenn Sie "eine ausgeklügelte gemeinsame Nutzung der Verwaltung der Knoten" wollten und die Vektorklasse auf diese Weise ändern würden, würden Sie bei einer Deque landen. Selbst dann ist es sehr schwierig, den Speicher in der vorgeschlagenen Weise wiederzuverwenden, auch wenn es allmählich ein wenig praktikabler wäre. Ich glaube nicht, dass es derzeit implementiert ist. Die Hauptsache ist, dass in einem solchen Sharing von Management-Knoten (eine deque) der Endknoten teilweise leer sein könnte.
18 Stimmen
Bin ich der Einzige, der sich fragt, warum dies nicht als
a + b
oa.concat(b)
in der Standardbibliothek? Vielleicht wäre die Standardimplementierung suboptimal, aber nicht jede Array-Verkettung muss mikro-optimiert sein58 Stimmen
Jahre der Entwicklung, das fortschrittlichste Operator-Overloading aller Mainstream-Sprachen, ein Templating-System, das die Komplexität der Sprache verdoppelt, und dennoch lautet die Antwort nicht v = v1 + v2;
7 Stimmen
Ich vermute, dass die STL die Sprache nicht überspezifizieren wollte, für den Fall, dass der Operator etwas anderes tun sollte, z. B. Kraftvektoren in einem Physikmodell hinzufügen. In diesem Fall könnten Sie überladen wollen
forceVector1 + forceVector2
um in klarem, prägnantem Code punktweise zu addieren.3 Stimmen
@Spike0xff, v = v1 + v2 hat in der Mathematik eine Bedeutung, die nichts mit Verkettung zu tun hat. Es hat auch einige Anforderungen, um berechenbar zu sein. Ich würde eher eine Append-Methode vorschlagen (eine Abkürzung dessen, was man mit
insert
) oder eine Push-Back-Überlastung.