C #에 해당하는 C ++의 Foreach 루프
이 코드를 C ++로 어떻게 변환합니까?
string[] strarr = {"ram","mohan","sita"};
foreach(string str in strarr) {
listbox.items.add(str);
}
범위 기준 :
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 사용 :
boost::array<std::string, 3> strarr = {"ram", "mohan", "sita"};
BOOST_FOREACH(std::string & str, strarr) {
listbox.items.add(str);
}
C ++ 0x에서는
for(string str: strarr) { ... }
그러나 그때까지는 일반 for 루프를 사용하십시오.
var
C # 의 키워드에 익숙해 진 후 auto
C ++ 11에서 키워드 를 사용하기 시작했습니다 . 둘 다 추론에 의해 유형을 결정하며 컴파일러가 유형을 파악하기를 원할 때 유용합니다. 다음은 코드의 C ++ 11 포트입니다.
#include <array>
#include <string>
using namespace std;
array<string, 3> strarr = {"ram", "mohan", "sita"};
for(auto str: strarr) {
listbox.items.add(str);
}
Boost에는이 작업을 수행하는 매크로가 있습니다.
http://www.boost.org/doc/libs/1_44_0/doc/html/foreach.html
재미를 위해 (새로운 람다 함수) :
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; } );
간단한 루프를 수행하는 것이 좋지만 :-)
다음과 같은 것 :
const char* strarr = {"ram","mohan","sita", 0L};
for(int i = 0; strarr[i]; ++i)
{
listbox.items.add(strarr[i]);
}
표준 C에서도 작동합니다. C ++에서는 null 요소없이 strarr의 끝을 감지하는 방법이 확실하지 않지만 위의 방법은 작동합니다.
string[] strarr = {"ram","mohan","sita"};
#include <string>
std::string strarr = { "ram", "mohan", "sita" };
or
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]);
Note: you can also put the strings into a std::vector rather than an 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);
The simple form:
std::string data[] = {"ram","mohan","sita"};
std::for_each(data,data+3,std::bind1st(std::mem_fun(&Y::add), &(listbox.items)));
An example in action:
#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)));
}
If you have an array you can simply use a for
loop. (I'm sorry, but I'm not going to type out the code for a for
loop for you.)
Using boost is the best option as it helps you to provide a neat and concise code, but if you want to stick to 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));
}
using 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);
}
참고URL : https://stackoverflow.com/questions/3648951/foreach-loop-in-c-equivalent-of-c-sharp
'program story' 카테고리의 다른 글
.NET 5 RC1을 제거 할 수 없습니다. (0) | 2020.11.10 |
---|---|
HTML 버튼 / 제출의 전체 스타일 제거 (0) | 2020.11.10 |
네면 모두에 박스 섀도우를 적용하는 방법은 무엇입니까? (0) | 2020.11.10 |
jQuery bind click * ANYTHING * but * ELEMENT * (0) | 2020.11.10 |
특정 뷰 컨트롤러에서 탐색 모음을 숨기는 방법 (0) | 2020.11.10 |