c++ - 함수 - vector clear 메모리




C++ 벡터의 모든 요소에서 함수 호출 (4)

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


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 를 사용할 수 있습니다.


for_each 사용 :

// for_each example
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

void myfunction (int i) {
  cout << " " << i;
}

struct myclass {
  void operator() (int i) {cout << " " << i;}
} myobject;

int main () {
  vector<int> myvector;
  myvector.push_back(10);
  myvector.push_back(20);
  myvector.push_back(30);

  cout << "myvector contains:";
  for_each (myvector.begin(), myvector.end(), myfunction);

  // or:
  cout << "\nmyvector contains:";
  for_each (myvector.begin(), myvector.end(), myobject);

  cout << endl;

  return 0;
}




vector