Vector ausgeben

#5510229
Lesenswert?
• ▲
▼
Das was du da programmiert hast ist eine Endlosschleife. In dem << 
Operator rufst du wieder diesen Operator auf.

Die Überladung müsste so passen, aber der vector sollte besser als const 
Referenz übergeben werden. In der Funktion musst du dann über die 
Elemente des Vektors iterieren und diese dann auf den Stream schreiben. 
Trennzeichen und Formatierung der Ausgabe kannst du dann auch festlegen.
#5510329
Lesenswert?
• ▲
▼
Falls das Hausaufgaben sind hat dir mkbit den Weg aufgezeigt.

Wenn du einfach nur eine funktionierende Lösung brauchst schau mal hier: 
https://louisdx.github.io/cxx-prettyprint/ Damit funktioniert es 
einfach.

Beispiel von der genannten Seite:
1
#include <iostream>
2
#include <vector>
3
#include "prettyprint.hpp"
4

5
int main() {
6
    std::vector<int> foo;
7
    foo.push_back(1);
8
    foo.push_back(2);
9
    foo.push_back(3);
10
    std::cout << "My vector: " << foo << std::endl;
11
    return 0;
12
}
Gast #5510410
Lesenswert?
• ▲
▼
M.K. B. schrieb:
> In der Funktion musst du dann über die
> Elemente des Vektors iterieren
1
vector<int> ages;
2
ages.push_back(10);
3
ages.push_back(12);
4
ages.push_back(13);
5
ages.push_back(14);
6
ages.push_back(15);
7

8
ostream& operator<<(ostream& os, const vector<int>& ages)
9
{
10
    for(int i=0; i<ages.size(); ++i)
11
        os << ages[i] << endl;
12
    return os;
13
}

Danke, habe es kapiert, man kann quasi endlos in den ostream schreiben, 
das mache ich dann mit der Iteration, zum Schluss gebe ich dann den 
ostream zurück.
#5510450
Lesenswert?
• ▲
▼
M.K. B. schrieb:
> René H. schrieb:
>> Eigentlich nimmt man dafür einen Iterator. Wäre „sauberer“.
>
> Oder seit C++11 ein range based for. Iterator geht aber natürlich auch
> in C++11 noch.


Eigentlich gibt es für so etwas output iteratoren:

1
#include <vector>
2
#include <iterator>
3
#include <algorithm>
4
#include <iostream>
5

6
template < typename T >
7
std::ostream& operator<<(std::ostream& os, std::vector<T> const& v)
8
{
9
  std::copy(v.begin(), v.end(), std::ostream_iterator<T>(os, " "));
10
  return os;
11
}
12

13
int main()
14
{
15
  std::vector<int> ages;
16
  ages.push_back(10);
17
  ages.push_back(12);
18
  ages.push_back(13);
19
  ages.push_back(14);
20
  ages.push_back(15);
21
  std::cout << ages << std::endl;
22
}
(Firma: privatfrickler.de) #5510511
Lesenswert?
• ▲
▼
Hallo,

Humpen schrieb:
> Hallo. Ich möchte einen Vektor in C++ mittels Operatorüberladung
> ausgeben weis aber nicht genau wie. Wie würdet ihr das machen?
> vector<int> ages{100};

nur ganz leise und am Rande bemerkt, bist Du Dir sicher, dass das tut, 
was Du denkst, was es tut? Der Vektor hat danach die Größe 1 und ages[0] 
liefert 100.
Wolltest Du das?

vlg
Timm
Gast #5510533
Lesenswert?
• ▲
▼
Timm R. schrieb:
> Der Vektor hat danach die Größe 1 und ages[0] liefert 100.
> Wolltest Du das?

Mir ging es nur darum den Vektor per Operatorüberladung auszugeben, dass 
er dabei nur ein Element besitzt ist ok. Habe später den Code abgeändert 
als es - dank den vielen Hilfestellungen - richtig geklappt hat. Danke 
aber für den Hinweis.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.