찾기 C++ 벡터의 모든 요소에서 함수 호출




vector clear 메모리 (5)

C ++에서는 모든 벡터 요소에 대해 반복되는 루프를 사용하지 않고 벡터의 각 요소에 함수를 호출하는 방법이 있습니까? 파이썬에서 '맵'과 비슷한 것.


한 쌍의 반복자와 함수 또는 펑터를 취하는 std::for_each 를 사용할 수 있습니다.


이미 std::for_each 언급 한 몇 가지 답변을 얻었습니다.

이것들이 여러분이 물어 본 질문에 응답하는 동안, 적어도 필자의 경험에 따르면, std::for_each 는 표준 알고리즘 중 가장 유용하지 std::for_each .

나는 (일례로) std::transform . 기본적으로 a[i] = f(b[i]); 또는 result[i] = f(a[i], b[i]); std::for_each 보다 훨씬 더 자주 사용됩니다. 많은 사람들이 std::for_each 를 사용하여 콜렉션의 요소를 자주 인쇄합니다. 그 목적을 위해 std::copy 를 대상으로 std::ostream_iterator 가 훨씬 더 잘 작동합니다.


C ++ 11에서는 람다를 사용할 수 있습니다. 예 :

std::vector<int> nums{3, 4, 2, 9, 15, 267};

std::for_each(nums.begin(), nums.end(), [](int &n){ n++; });

심판 : std::for_each


C ++ 11을 사용하는 경우에는 원거리 기반의 방법 인 더 짧은 방법 있습니다. 그 목적은 바로 이것입니다.

std::vector<int> v {1,2,3,4,5};

for (int element : v)
    std::cout << element; //prints 12345

적절한 경우 참조 및 const를 적용 할 수도 있고 유형이 길면 자동을 사용할 수도 있습니다.

std::vector<std::vector<int>> v {{1,2,3},{4,5,6}};

for (const auto &vec : v)
{
    for (int element : vec)
        cout << element;

    cout << '\n';
} 

산출:

123
456

예 : std::for_each .

void foo(int a) {
    std::cout << a << "\n";
}

std::vector<int> v;

...

std::for_each(v.begin(), v.end(), &foo);




vector