Vector initialisieren
-
Hallo!
Gibt es eine Möglichkeit, einen std::vector sofort zu initialisieren,
so ähnlich wie ein Array?const unsigned SET_TESTSTATE[] = {0x52, 0xd2}; const vector<unsigned> SET_TESTSTATE;
-
oder direkt im Konstruktor
-
Das ist in der Tat ein manko der STL (allgemein der Sprache). Die Einfachheit der Initialisierung hat da ein wenig zu leiden im Vergleich zu Arrays.
Das hat Stroustup auch mal in einem Video angesprochen:
http://csclub.uwaterloo.ca/media/C++0x - An Overview.htmlDas soll in C++0x alles besser werden.
-
drakon schrieb:
Das soll in C++0x alles besser werden.
Nachfolgend ein kleiner Auszug; Achtung: Das PDF ist 12 MB groß...
<a href= schrieb:
C++ Standard, Draft Oktober 2008 [8.5.4 List-initialization]">
int a = {1}; std::complex<double> z{1,2}; new std::vector<std::string>{"once", "upon", "a", "time"}; // 4 string elements f( {"Nicholas","Annemarie"} ); // pass list of two elements return { "Norah" }; // return list of one element int* e {}; // initialization to zero / null pointer x = double{1}; // explicitly construct a double std::map<std::string,int> anim = { {"bear",4}, {"cassowary",2}, {"tiger",7} };
-
Na wenn es keine Einzeiler-Lösung gibt, muss ich mir wohl was anderes
einfallen lassen. Ich will in einer Headerdatei Konstanten deklarieren,
die Microcontrollerbefehle enthalten. Ein-Byte-Befehle hab ich als
const unsigned deklariert. Mehr-Byte-Befehle wollte ich in Vectoren
packen, da ich diese einem Array vorziehe. Eine Änderung auf Arrays wäre
mit zu gossem Aufwand verbunden, da ich die restlichen Programmteile mit
Vectoren programmiert habe.
-
mase schrieb:
Na wenn es keine Einzeiler-Lösung gibt,
Definiere Einzeiler-Lösung...
const std::size_t arrLength = 2; const unsigned arr[arrLength] = {0x52,0xd2}; const vector<unsigned> SET_TESTSTATE(arr, arr+arrLength); //eine Zeile :P
-
Wie wäre es mit Boost.Assign und dem darin enthaltenen list_of?
#include <vector> #include <boost/assign/list_of.hpp> int main() { std::vector<unsigned> vec = boost::assign::list_of(0x52)(0xd2): return 0; }
Grüssli
-
<klugscheiß>
boost::assign::list_of(0x52)(0xd2)
</ klugscheiß>
-
pumuckl schrieb:
<klugscheiß>
boost::assign::list_of(0x52)(0xd2)
</ klugscheiß>
Korrigiert, danke fürs Klugscheissen
Grüssli