Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > C/C++
You last visited: Today at 03:07

  • Please register to post and access all features, it's quick, easy and FREE!

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.

Reply
 
Old   #1
 
mcuncool's Avatar
 
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.
mcuncool is offline  
Old 06/15/2013, 16:36   #2

 
snow's Avatar
 
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.
snow is offline  
Thanks
1 User
Old 06/15/2013, 16:41   #3
 
Master674b's Avatar
 
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
Master674b is offline  
Thanks
1 User
Old 06/15/2013, 18:20   #4
 
Schlüsselbein's Avatar
 
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);
	}
}
Schlüsselbein is offline  
Thanks
4 Users
Old 06/16/2013, 17:33   #5
 
Master674b's Avatar
 
elite*gold: 0
Join Date: Dec 2012
Posts: 255
Received Thanks: 110
Quote:
Originally Posted by Schlüsselbein View Post
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.
Master674b is offline  
Old 06/18/2013, 11:56   #6
 
Raz9r's Avatar
 
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) ...
Raz9r is offline  
Old 06/18/2013, 13:51   #7
 
Schlüsselbein's Avatar
 
elite*gold: 0
Join Date: Feb 2013
Posts: 1,137
Received Thanks: 869
Wer vector<bool> benutzt, gehört bestraft
Schlüsselbein is offline  
Thanks
2 Users
Reply


Similar Threads 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.


Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2025 elitepvpers All Rights Reserved.