gesamten Inhalt eines Vectors ausgeben

AndyVolley

Grünschnabel
Hallo, ich habe eine Frage zum generischen Vector von C++. Ich würde gerne ganz einfach den gesamten Inhalt eines Vectors auslesen. Wenn ich das mit einer Schleife mache, die jedes Mal
Code:
v.at(i)
aufruft, wird der Vektor natürlich jedes Mal von vorne durchlaufen und hat somit O(n^2) aufwand, was bei großen Datenmengen nicht so toll ist. Gibt es eine Funktion/Möglichkeit diesen Aufwand linear zu machen?
 
Hierbei bietet es sich an, mit einem Iterator zu arbeiten:

Code:
vector<int> vec;
vector<int>::iterator it;

/*
 * ...
 */

it = vec.begin();
while (it != vec.end()) {
	/*
	 * ...
	 */
	it++;
}
 
Super! Vielen Dank für deine schnelle Hilfe! Hatte schon so etwas vermutet, allerdings bin ich mit der msdn nicht auf Anhieb klar gekommen!
 
Hi.

Das ist allerdings nicht ganz richtig, wenn du meinst das die Methode at(in) eines std::vector's die Komplexität O(n) hat. Ein Vektor ist ein Kontainer mit wahlfreiem Zugriff, d.h. sowohl operator [] (int) als auch die Methode at(int) haben die Komplexität O(1), die Zugriffszeit ist also konstant (wie auch bei einem normalen C-Array).

Es ist also egal was du verwendest. (Außer bei der Spezialisierung von vector<bool> so wie sie momentan in der libstdc++ (die Standardbibliothek des GCC) implementiert ist. Da ist es besser/schneller Iteratoren zu verwenden.)

Außerdem, wenn du sagst "auslesen", meinst du dann die Elemente des Vektors ausgeben?
Das geht ziemlich einfach z.B. so:
Code:
#include <algorithm>
#include <iterator>
#include <iostream>
#include <vector>
...
vector<int> vec;
...
copy(vec.begin(), vec.end(), ostream_iterator<int>(cout, " "));
 
Zurück