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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren