Wie würde ich diesen Code in C ++ konvertieren?
string[] strarr = {"ram","mohan","sita"};
foreach(string str in strarr) {
listbox.items.add(str);
}
Wie würde ich diesen Code in C ++ konvertieren?
string[] strarr = {"ram","mohan","sita"};
foreach(string str in strarr) {
listbox.items.add(str);
}
Antworten:
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);
}
for(int i = 0; i < sizeof(strarr)/sizeof(strarr[0]); i++)im ersten Codebeispiel?
Nachdem varich mich an das Schlüsselwort in C # gewöhnt habe, beginne ich, das autoSchlü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);
}
Boost hat ein Makro, das dies für Sie erledigt.
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 :-)
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.
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.
string [] strarr = {"ram", "mohan", "sita"};
#include <string>
std::string strarr = { "ram", "mohan", "sita" };
oder
const char* strarr[] = { "ram", "mohan", "sita" };
foreach (Zeichenfolge str in strarr) {listbox.items.add (str); }}
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);
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)));
}
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));
}
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);
}
for (const auto &str : {"ram","mohan","sita"} ) ...?
std::for_each.