it-swarm.com.de

Foreach-Schleife in C++ - Äquivalent von C #

Wie würde ich diesen Code nach C++ konvertieren?

string[] strarr = {"ram","mohan","sita"};    
foreach(string str in strarr) {
  listbox.items.add(str);
}
62
Swapnil Gupta

Bereich basierend auf :

std::array<std::string, 3> strarr = {"ram", "mohan", "sita"};
for(const std::string& str : strarr) {
  listbox.items.add(str);
}

vor c ++ 11

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;
}

Verwenden von Boost :

boost::array<std::string, 3> strarr = {"ram", "mohan", "sita"};
BOOST_FOREACH(std::string & str, strarr) {
  listbox.items.add(str);
}
108
missingfaktor

In C++ 0x hast du

for(string str: strarr) { ... }

Aber bis dahin verwenden Sie normale for-Schleife.

25
Artyom

Nachdem ich mich an das Schlüsselwort var in C # gewöhnt habe, verwende ich jetzt das Schlüsselwort auto in C++ 11. Sie bestimmen den Typ durch Inferenz und sind nützlich, wenn der Compiler nur den Typ für Sie ermitteln 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);
}
11
Thane Plummer

Boost hat ein Makro, das dies für Sie erledigt.

http://www.boost.org/doc/libs/1_44_0/doc/html/foreach.html

5
user439793

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 es eine einfache Schleife ist, wird empfohlen :-)

5
Anders

So 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. Nicht sicher in C++, wie das Ende der Zeichenfolge erkannt werden kann, ohne ein Nullelement zu haben, aber das Obige sollte funktionieren.

2
Matt

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)));
}
1
Martin York

string [] strarr = {"ram", "mohan", "sita"};

#include <string>
std::string strarr = { "ram", "mohan", "sita" };

oder

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]);

Hinweis: Sie können die Zeichenfolgen auch in einen std :: vector anstelle eines Arrays 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);
1
Tony Delroy

Die Verwendung von Boost ist die beste Option, da Sie damit einen sauberen und präzisen Code bereitstellen können 

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));

}
0
agupta666

Wenn Sie ein Array haben, können Sie einfach eine for-Schleife verwenden. (Es tut mir leid, aber ich werde den Code für eine for-Schleife nicht für Sie eingeben.)

0
EMP

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);
}
0
equistasis