C# C+中的Foreach循环+;C的等价物# 如何将此代码转换为C++?< /p> string[] strarr = {"ram","mohan","sita"}; foreach(string str in strarr) { listbox.items.add(str); }
如果您有一个数组,您可以简单地使用C# C+中的Foreach循环+;C的等价物# 如何将此代码转换为C++?< /p> string[] strarr = {"ram","mohan","sita"}; foreach(string str in strarr) { listbox.items.add(str); },c#,c++,C#,C++,如果您有一个数组,您可以简单地使用for循环。(很抱歉,我不会为您键入for循环的代码。)在C++0x中 for(string str: strarr) { ... } 但在此之前,请使用普通for循环。Boost有一个宏可以为您执行此操作 类似于: const char* strarr = {"ram","mohan","sita", 0L}; for(int i = 0; strarr[i]; ++i) { listbox.items.add(strarr[i]); } 也适用于标
for
循环。(很抱歉,我不会为您键入for
循环的代码。)在C++0x中
for(string str: strarr) { ... }
但在此之前,请使用普通for循环。Boost有一个宏可以为您执行此操作 类似于:
const char* strarr = {"ram","mohan","sita", 0L};
for(int i = 0; strarr[i]; ++i)
{
listbox.items.add(strarr[i]);
}
也适用于标准C。在C++中不确定如何检测SARARR的结束,而没有空元素,但以上应该工作。
std::array strarr={“ram”、“mohan”、“sita”};
for(const std::string&str:strarr){
listbox.items.add(str);
}
前c++11
std::string strarr[]={“ram”、“mohan”、“sita”};
对于(int i=0;i<3;++i){
listbox.items.add(strarr[i]);
}
或
std::string strarr[]={“ram”、“mohan”、“sita”};
std::向量strvec(strarr,strarr+3);
std::vector::迭代器itr=strvec.begin();
while(itr!=strvec.end()){
列表框。项目。添加(*itr);
++itr;
}
使用:
boost::array strarr={“ram”、“mohan”、“sita”};
BOOST_FOREACH(std::string&str,strarr){
listbox.items.add(str);
}
字符串[]strarr=
{“ram”、“mohan”、“sita”}
foreach(strarr中的字符串str)
{
listbox.items.add(str);
}
for(int i=0;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);
std::vector strvec;
strvec.推回(“ram”);
strvec.推回(“默翰”);
strvec.推回(“sita”);
for(std::vector::const_迭代器i=strvec.begin();i!=strvec.end();++i)
列表框.项目.添加(*i);
只是为了好玩(新的lambda功能):
static std::列出一些\u列表;
向量s;
s、 推回(“a”);
s、 推回(“b”);
s、 推回(“c”);
对于每个(s.begin()、s.end()、[=](字符串str)
{
一些列表。推回(str);
}
);
对于_each(some_list.begin()、some_list.end()、[](string ss){cout,使用boost是最好的选择,因为它可以帮助您提供简洁明了的代码,但是如果您想坚持使用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)));
}
#包括
#包括
#包括
#包括
Y类
{
公众:
void add(标准::字符串值)
{
std::cout在习惯了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);
}
#包括
#包括
使用名称空间std;
数组strarr={“ram”、“mohan”、“sita”};
用于(自动str:strarr){
listbox.items.add(str);
}
<代码> < P>使用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);
}
#包括
#包括
std::向量列表框;
...
std::向量strarr{“ram”、“mohan”、“sita”};
用于(常量自动和str:strarr)
{
列表框。推回(str);
}
如果它是一个静态分配的数组,那么sizeof(strarr)/sizeof(strarr[0])
会获取数组中的元素数;但是,如果它是一个动态分配的数组(或者如果你只有一个指针),那么就无法获取大小——你必须通过其他带外方式获取它。数组大小的正确类型是(因此,数组的索引是std::size\t
。我知道谷歌在这方面很差劲,所以这不是你的错,但最新版本是1.44,所以链接应该是容器1\u 44,而不是1\u 35。(你必须手动修复谷歌结果。)谢谢。我已经下载了1.44并在我的系统上构建了它,但在我发布它时没有考虑它的版本。@ronag:接受的答案反映了我对std::for_each
的看法。关于数组的大小,比如for(int I=0;I
?
for (int i = 0; i < sizeof strarr / sizeof *strarr; ++i)
listbox.items.add(strarr[i]);
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);
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; } );
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)));
}
#include <array>
#include <string>
using namespace std;
array<string, 3> strarr = {"ram", "mohan", "sita"};
for(auto str: strarr) {
listbox.items.add(str);
}
#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);
}