Wie würde ich diesen Code in C ++ konvertieren?
string[] strarr = {"ram","mohan","sita"};
foreach(string str in strarr) {
listbox.items.add(str);
}
std::array<std::string, 3> strarr = {"ram", "mohan", "sita"};
for(const std::string& str : strarr) {
listbox.items.add(str);
}
std::string strarr[] = {"ram", "mohan", "sita"};
for(int i = 0; i < 3; ++i) {
listbox.items.add(strarr[i]);
}
oder
std::string strarr[] = {"ram", "mohan", "sita"};
std::vector<std::string> strvec(strarr, strarr + 3);
std::vector<std::string>::iterator itr = strvec.begin();
while(itr != strvec.end()) {
listbox.items.add(*itr);
++itr;
}
boost::array<std::string, 3> strarr = {"ram", "mohan", "sita"};
BOOST_FOREACH(std::string & str, strarr) {
listbox.items.add(str);
}
std::for_each
.for(int i = 0; i < sizeof(strarr)/sizeof(strarr[0]); i++)
im ersten Codebeispiel?In C ++ 0x haben Sie
for(string str: strarr) { ... }
Aber bis dahin verwenden Sie gewöhnliche for-Schleife.
quelle
Nachdem
var
ich mich an das Schlüsselwort in C # gewöhnt habe, beginne ich, dasauto
Schlüsselwort in C ++ 11 zu verwenden. Beide bestimmen den Typ durch Inferenz und sind nützlich, wenn der Compiler nur den Typ für Sie herausfinden soll. Hier ist der C ++ 11-Port Ihres Codes:#include <array> #include <string> using namespace std; array<string, 3> strarr = {"ram", "mohan", "sita"}; for(auto str: strarr) { listbox.items.add(str); }
quelle
Boost hat ein Makro, das dies für Sie erledigt.
http://www.boost.org/doc/libs/1_44_0/doc/html/foreach.html
quelle
Nur zum Spaß (neue Lambda-Funktionen):
static std::list<string> some_list; vector<string> s; s.push_back("a"); s.push_back("b"); s.push_back("c"); for_each( s.begin(), s.end(), [=](string str) { some_list.push_back(str); } ); for_each( some_list.begin(), some_list.end(), [](string ss) { cout << ss; } );
Obwohl eine einfache Schleife empfohlen wird :-)
quelle
Etwas wie:
const char* strarr = {"ram","mohan","sita", 0L}; for(int i = 0; strarr[i]; ++i) { listbox.items.add(strarr[i]); }
Funktioniert auch für Standard C. Ich bin mir in C ++ nicht sicher, wie das Ende des Strarrs erkannt werden kann, ohne ein Null-Element zu haben, aber das Obige sollte funktionieren.
quelle
sizeof(strarr)/sizeof(strarr[0])
Sie die Anzahl der Elemente im Array. Wenn es sich jedoch um ein dynamisch zugewiesenes Array handelt (oder wenn Sie nur einen Zeiger haben), gibt es keine Möglichkeit, die Größe zu ermitteln - Sie müssen sie auf andere Weise außerhalb des Bandes ermitteln.std::size_t
.#include <string> std::string strarr = { "ram", "mohan", "sita" };
oder
const char* strarr[] = { "ram", "mohan", "sita" };
for (int i = 0; i < sizeof strarr / sizeof *strarr; ++i) listbox.items.add(strarr[i]);
Hinweis: Sie können die Zeichenfolgen auch in einen std :: -Vektor anstatt in ein Array einfügen:
std::vector<std::string> strvec; strvec.push_back("ram"); strvec.push_back("mohan"); strvec.push_back("sita"); for (std::vector<std::string>::const_iterator i = strvec.begin(); i != strvec.end(); ++i) listbox.items.add(*i);
quelle
Die einfache Form:
std::string data[] = {"ram","mohan","sita"}; std::for_each(data,data+3,std::bind1st(std::mem_fun(&Y::add), &(listbox.items)));
Ein Beispiel in Aktion:
#include <algorithm> #include <string> #include <iostream> #include <functional> class Y { public: void add(std::string value) { std::cout << "Got(" << value << ")\n"; } }; class X { public: Y items; }; int main() { X listbox; std::string data[] = {"ram","mohan","sita"}; std::for_each(data,data+3,std::bind1st(std::mem_fun(&Y::add), &(listbox.items))); }
quelle
Wenn Sie ein Array haben, können Sie einfach eine
for
Schleife verwenden. (Es tut mir leid, aber ich werde den Code für einefor
Schleife nicht für Sie eingeben .)quelle
Die Verwendung von Boost ist die beste Option, da Sie damit einen übersichtlichen und präzisen Code bereitstellen können, aber wenn Sie sich an STL halten möchten
void listbox_add(const char* item, ListBox &lb) { lb.add(item); } int foo() { const char* starr[] = {"ram", "mohan", "sita"}; ListBox listBox; std::for_each(starr, starr + sizeof(starr)/sizeof(char*), std::bind2nd(std::ptr_fun(&listbox_add), listBox)); }
quelle
mit C ++ 14:
#include <string> #include <vector> std::vector<std::string> listbox; ... std::vector<std::string> strarr {"ram","mohan","sita"}; for (const auto &str : strarr) { listbox.push_back(str); }
quelle
for (const auto &str : {"ram","mohan","sita"} ) ...
?