큰 std::vectors
(const &
전달)을 허용하고 큰 벡터 (값순)를 반환하는 함수가 있습니다. 내 코드의 한 부분에서, 내가 수행해야합니다반복자를 사용하여 반복 가능 함수를 통해 반복 함수를 매핑하는 C++
std::list<std::vector<double> > all_vectors;
// all_vectors is filled with values somewhere in here
for (const std::vector & v : all_values)
{
std::vector<double> res = f(v);
// do something with res
}
을 내 코드의 다른 부분에서 내가 수행해야합니다
std::list<std::vector<double> > all_vectors;
// all_vectors is filled with values somewhere in here
for (const std::vector & v : all_values)
{
std::vector<double> res = f(v);
// do something different with res
}
가장 간단한 방법 (메모리 돼지) : 그것을 단순히 을 통해 f
을 매핑 한 다음 결과를보고 // do something with res
또는 // do something different with res
(각 경우에 대해)을 수행하여 코드를 재사용하는 것은 간단합니다. 이것의 단점은 내가 불필요하게 큰 std::vector
의 긴 목록을 저장할 필요가 있다는 것이다. 한편으로, 나는 내가 가질 수있는 것보다 더 많은 기억을 사용하지 않을 것이라는 확신이있다. 그러나 그렇다고해도 불필요하게 거대한 양의 데이터를 저장하는 것은 나쁜 습관처럼 보입니다. 하나의 옵션은지도처럼 동작 일부 iterator_map 함수를 작성하는 것입니다,하지만이 필요로 결과를 생성합니다
옵션 1 (사용 반복자는이 요청으로 결과를 생성합니다). 나는 이것이 파이썬의 yield
에 꽤 도움이 될 것이라고 생각한다.
옵션 2 (사용 객체 지향 설계) : 하나 개의 파생 클래스에서, g
이 // do something with res
을 수행 할 것이며, 다른에서, 그것은 // do something different with res
을 수행 할 것입니다 : 또 다른 옵션은 ABC
상속을 사용하고 기능 g
을 무시하는 것입니다.
옵션 3+ (???) :
난 정말 당신이 C++에서이 같은 문제를 처리 할 방법에 대한 조언을 듣고 싶습니다. 미리 감사드립니다.
f (v)는 벡터를 필터링하고 v의 하위 집합을 반환합니다. – Jagannath
아니요,'f (v)'는'v'에있는 값의 조밀 한 가우스 평활을 계산합니다. – user