# gesamten Inhalt eines Vectors ausgeben



## AndyVolley (11. August 2005)

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

```
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?


----------



## Matthias Reitinger (11. August 2005)

Hierbei bietet es sich an, mit einem Iterator zu arbeiten:


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

/*
 * ...
 */

it = vec.begin();
while (it != vec.end()) {
	/*
	 * ...
	 */
	it++;
}
```


----------



## AndyVolley (11. August 2005)

Super! Vielen Dank für deine schnelle Hilfe! Hatte schon so etwas vermutet, allerdings bin ich mit der msdn nicht auf Anhieb klar gekommen!


----------



## deepthroat (11. August 2005)

Hi.

Das ist allerdings nicht ganz richtig, wenn du meinst das die Methode at(in) eines std::vector's die Komplexität O 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:
	
	
	



```
#include <algorithm>
#include <iterator>
#include <iostream>
#include <vector>
...
vector<int> vec;
...
copy(vec.begin(), vec.end(), ostream_iterator<int>(cout, " "));
```


----------

