Hoe kan ik deze code converteren naar C++?
string[] strarr = {"ram","mohan","sita"};
foreach(string str in strarr) {
listbox.items.add(str);
}
Antwoord 1, autoriteit 100%
bereik gebaseerd op:
std::array<std::string, 3> strarr = {"ram", "mohan", "sita"};
for(const std::string& str : strarr) {
listbox.items.add(str);
}
pre c++11
std::string strarr[] = {"ram", "mohan", "sita"};
for(int i = 0; i < 3; ++i) {
listbox.items.add(strarr[i]);
}
of
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;
}
Boostgebruiken:
boost::array<std::string, 3> strarr = {"ram", "mohan", "sita"};
BOOST_FOREACH(std::string & str, strarr) {
listbox.items.add(str);
}
Antwoord 2, autoriteit 24%
In C++0x heb je
for(string str: strarr) { ... }
Maar gebruik tot die tijd gewone for-lus.
Antwoord 3, autoriteit 11%
Nadat ik gewend ben geraakt aan het sleutelwoord var
in C#, begin ik het sleutelwoord auto
in C++11 te gebruiken. Ze bepalen allebei het type per gevolgtrekking en zijn handig als je wilt dat de compiler het type voor je uitzoekt. Dit is de C++11-poort van je code:
#include <array>
#include <string>
using namespace std;
array<string, 3> strarr = {"ram", "mohan", "sita"};
for(auto str: strarr) {
listbox.items.add(str);
}
Antwoord 4, autoriteit 4%
Boost heeft een macro die dit voor je doet.
http://www.boost.org/doc /libs/1_44_0/doc/html/foreach.html
Antwoord 5, autoriteit 4%
Gewoon voor de lol (nieuwe lambda-functies):
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; } );
Hoewel het wordt aanbevolen om een eenvoudige lus te maken 🙂
Antwoord 6, autoriteit 2%
Zoiets als:
const char* strarr = {"ram","mohan","sita", 0L};
for(int i = 0; strarr[i]; ++i)
{
listbox.items.add(strarr[i]);
}
Werkt ook voor standaard C. Ik weet niet zeker hoe je in C++ het einde van de strarr kunt detecteren zonder een null-element, maar het bovenstaande zou moeten werken.
Antwoord 7
string[] strarr =
{“ram”,”mohan”,”sita”};
#include <string>
std::string strarr = { "ram", "mohan", "sita" };
of
const char* strarr[] = { "ram", "mohan", "sita" };
foreach(string str in strarr)
{
listbox.items.add(str);
}
for (int i = 0; i < sizeof strarr / sizeof *strarr; ++i)
listbox.items.add(strarr[i]);
Opmerking: je kunt de strings ook in een std::vector plaatsen in plaats van een array:
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);
Antwoord 8
De eenvoudige vorm:
std::string data[] = {"ram","mohan","sita"};
std::for_each(data,data+3,std::bind1st(std::mem_fun(&Y::add), &(listbox.items)));
Een voorbeeld in actie:
#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)));
}
Antwoord 9
Als u een array hebt, kunt u eenvoudig een for
lus. (Het spijt me, maar ik ga de code niet typen voor een for
lus voor u.)
Antwoord 10
Het gebruik van BOOST is de beste optie omdat het u helpt om een ​​nette en beknopte code te bieden, maar als u aan STL
wilt vasthouden
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));
}
Antwoord 11
Gebruik 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);
}