이 예제의 BOOST_FOREACH
을 "순수한"C++ 11 코드로 바꿀 수 있습니까?BOOST_FOREACH를 "순수한"C++ 11 대체로 대체 하시겠습니까?
#include <map>
#include <functional>
#include <boost/foreach.hpp>
#include <iostream>
int main() {
std::map<int, std::string> map = {std::make_pair(1,"one"), std::make_pair(2,"two")};
int k;
std::string v;
BOOST_FOREACH(std::tie(k, v), map) {
std::cout << "k=" << k << " - " << v << std::endl;
}
}
k
및 v
에 대한 참조에 한 쌍의 키/값을 유지하고있는 주요 기능.
for(std::tie(k,v) : map)
{
std::cout << "k=" << k << " - " << v << std::endl;
}
및
auto i = std::tie(k,v);
for(i : map)
{
std::cout << "k=" << k << " - " << v << std::endl;
}
을하지만 원거리 루프 아이디어를 기반으로 보였다 중 어느 것도 작동하지하기 :
나는 시도했다. 아마도이 루프 기반도 있기 때문에,
:
전에 선언을 가질 필요가 원거리 :
std::vector<int> test;
int i;
for (i : test);
이 유효하지 않습니다. 내가 찾을 수
가장 가까운 동등한은 다음과 같습니다 BOOST_FOREACH
버전과 확실히 간결하지
for (auto it = map.begin(); it!=map.end() && (std::tie(k,v)=*it,1); ++it)
{
std::cout << "k=" << k << " - " << v << std::endl;
}
!
C++ 11에서 부스트없이 똑같은 것을 표현할 수있는 방법이 있습니까?
첫 번째 예에서 모든 반복에 문자열을 복사하지 않고 있습니까 매크로 부스트와 같은 출력을 생성? 너 정말 그걸 원해? – pmr