C + + 等价于 C # 的 Foreach 循环

如何将这段代码转换为 C + + ?

string[] strarr = {"ram","mohan","sita"};
foreach(string str in strarr) {
listbox.items.add(str);
}
150908 次浏览

如果你有一个数组,你可以简单地使用 for循环。(对不起,我不打算为您输入 for循环的代码。)

在 C + + 0x 中

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

但在此之前使用普通 for 循环。

Boost 有一个宏可以为您完成这项工作。

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

比如:

const char* strarr = {"ram","mohan","sita", 0L};


for(int i = 0; strarr[i]; ++i)
{
listbox.items.add(strarr[i]);
}

也适用于标准 C。不确定在 C + + 中如何在没有 null 元素的情况下检测 strarr 的结束,但是上面的应该可以。

基于 的范围:

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

前 c + + 11

std::string strarr[] = {"ram", "mohan", "sita"};
for(int i = 0; i < 3; ++i) {
listbox.items.add(strarr[i]);
}

或者

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

String [] strarr = {“ ram”,“ mohan”,“ sita”} ;

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

或者

const char* strarr[] = { "ram", "mohan", "sita" };

Foreach (strarr 中的 string str) { Add (str) ; }

for (int i = 0; i < sizeof strarr / sizeof *strarr; ++i)
listbox.items.add(strarr[i]);

注意: 您也可以将字符串放入 std: : Vector 而不是数组中:

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

只是为了好玩(新的 lambda 函数) :

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

尽管建议使用简单的循环: -)

使用 ost 是最好的选择,因为它可以帮助您提供一个简洁明了的代码,但是如果您想坚持使用 STL

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


}

简单的形式:

std::string  data[] = {"ram","mohan","sita"};
std::for_each(data,data+3,std::bind1st(std::mem_fun(&Y::add), &(listbox.items)));

现实中的一个例子:

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

在习惯了 C # 中的 var关键字之后,我开始在 C + + 11中使用 auto关键字。它们都是通过推理来确定类型的,当您只想让编译器为您指定类型时,它们非常有用。下面是代码的 C + + 11端口:

#include <array>
#include <string>


using namespace std;


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

使用 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);
}