|
You last visited: Today at 03:07
Advertisement
[halp!] C++ Funktionstemplate für Ausgabe multidimensionaler Vectoren
Discussion on [halp!] C++ Funktionstemplate für Ausgabe multidimensionaler Vectoren within the C/C++ forum part of the Coders Den category.
06/15/2013, 16:23
|
#1
|
elite*gold: 0
Join Date: Apr 2008
Posts: 8
Received Thanks: 3
|
[halp!] C++ Funktionstemplate für Ausgabe multidimensionaler Vectoren
Mkay, also ich habe das hier zusammengebastelt:
Code:
template <typename T>
void printMultiVector(std::vector<std::vector<T>> &v){
for (int i=0; i<v.size();i++){
for(int j=0;j<v[i].size();j++){
std::cout << v[i][j] << " ";
}
std::cout << endl;
}
std::cout << endl;
}
Ich bin ein noob in C++, geschweige generische Programmierung in C++
und ich werde das Gefühl net los, dass:
a) das irgendwie totaler Schwachsinn ist
b) das besser gehen muss
andererseits erfüllt es seinen Zweck(&verkürzt meinen Code) was mich SEHR erfreut. Bin für jeden Input dankbar: Stil, Semantics, Verweise, Verbesserungen, Suche nach dem Sinn des Lebens etc.
|
|
|
06/15/2013, 16:36
|
#2
|
elite*gold: 724
Join Date: Mar 2011
Posts: 10,479
Received Thanks: 3,318
|
Die generische Programmierung kenne ich auch nicht in der Tiefe als dass ich da großartig was verbessern könnte, aber die Iteration würde ich evtl. Iteratoren (evtl. auch direkt std::for_each) oder die C++11 for-Schleife nutzen ( for (auto& i : v) { for (auto& j : i) { std::cout << j << " "; } } ).
Großartig was verbessern an den Durchläufen an sich kann man nicht, das ist immer i*j. :/
Als Template-Parameter kannst du auch rein theoretisch direkt std::vector<std::vector<type>> übergeben, wenn du sicher stellst, dass dein Typ im ersten Vector immer einer ist, der iteriert werden kann.
|
|
|
06/15/2013, 16:41
|
#3
|
elite*gold: 0
Join Date: Dec 2012
Posts: 255
Received Thanks: 110
|
Wüsste spontan nicht, wie man das einfacher machen könnte. Höchstens so:
Code:
template <typename T>
void print_2d_container(const T& container) {
for (const auto& y: container) {
for (const auto& x: y)
std::cout << x << ' ';
std::cout << std::endl;
}
}
Edit: zu langsam
|
|
|
06/15/2013, 18:20
|
#4
|
elite*gold: 0
Join Date: Feb 2013
Posts: 1,137
Received Thanks: 869
|
Ggf sowas in der Art:
Code:
template<typename T>
void cout_container(const T& cont)
{
for(auto& c : cont)
{
std::ostream_iterator<T::value_type::value_type> out(std::cout, "\n");
std::copy(c.begin(), c.end(), out);
}
}
|
|
|
06/16/2013, 17:33
|
#5
|
elite*gold: 0
Join Date: Dec 2012
Posts: 255
Received Thanks: 110
|
Quote:
Originally Posted by Schlüsselbein
Ggf sowas in der Art:
Code:
template<typename T>
void cout_container(const T& cont)
{
for(auto& c : cont)
{
std::ostream_iterator<T::value_type::value_type> out(std::cout, "\n");
std::copy(c.begin(), c.end(), out);
}
}
|
Hier könnte man das argument statt als const ref auch by value übergeben und über std::move in std::cout moven, das wäre noch effizienter im fall das cont ein temporary ist.
Code:
template <typename T, typename Strm>
void move_2d_container_to_strm(T container, Strm& strm) {
for (auto& c: container) {
std::ostream_iterator<T::value_type::value_type> out_it(strm, " ");
std::move(std::begin(c), std::end(c), out_it);
strm << std::endl;
}
}
Damit würde das ganze noch move semantics benutzen, sprich falls container ein ivalue objekt ist -> copy, sonst move.
|
|
|
06/18/2013, 11:56
|
#6
|
elite*gold: 297
Join Date: Dec 2010
Posts: 1,129
Received Thanks: 1,687
|
Man sollte übrigens, um den seltenen Fall eines vector<bool> zu behandeln, folgendes benutzen:
Code:
for (auto &&elem : container) ...
|
|
|
06/18/2013, 13:51
|
#7
|
elite*gold: 0
Join Date: Feb 2013
Posts: 1,137
Received Thanks: 869
|
Wer vector<bool> benutzt, gehört bestraft
|
|
|
Similar Threads
|
[Hilfe] Vectoren umrechnung
04/15/2013 - C/C++ - 23 Replies
Ich habe eine funktion geschrieben, um in einem Spiel 3d Koordinaten in 2d Koodinaten umzurechnen, um anschließend meine Box drüber zu zeichnen.
Es klappt eiglich ganz ok aber es gibt ein Problem, hinter das ich nicht steig.
Je weiter ich mich mit der Maus vom Objekt entferne, desto mehr entfernt sich die Box vom Objekt.
Ich lade erstmal ein Screen hoch, in dem ihr die Werte der einzelnen Koordinaten genau betrachten könnt, um euch ein Bild davon machen zu können was ich mache.
...
|
Some halp please?
01/22/2012 - Mabinogi - 14 Replies
http://i1226.photobucket.com/albums/ee415/Utsukush iikage/Untitled.png
why do the eyes expand over the face?!!?!??!?!?!!?!?
|
halp ;D
12/02/2011 - Dekaron - 6 Replies
Can someone edit those monsters from data/share/creature/monster.csv so they'll freeze a.k.a not move xD
5500
5501
5502
5503
those are the castor bosses, thanks in advance!
PS- I couldnt make it q.q
|
All times are GMT +1. The time now is 03:08.
|
|