2011-02-04 2 views
2

C++에서 컬렉션 또는 컨테이너에 알고리즘을 적용하려면 operator()을 오버로드해야합니다. 예를 들어, 컨테이너 난수를 생성합니다 C++의 펑터와 같은 C# 컨테이너에 알고리즘을 적용하는 방법은 무엇입니까?

#include <iostream> 
#include <vector> 
#include <string> 
#include <algorithm> 
#include <cstdlib> 

using namespace std; 

class rnd_gen { 
public: 
    rnd_gen(int lo, int up) : lo(lo), up(up) { 

    } 

    int operator()() const { 
     return lo + rand() % up; 
    } 

private: 
    int lo; 
    int up; 
}; 

int main() { 
    vector<int> vt; 
    vt.push_back(3); 
    vt.push_back(1); 
    vt.push_back(2); 
    generate(vt.begin(), vt.end(), rnd_gen(10, 100)); 
} 

인가

명시 적으로 루프를 작성하지 않고도 작동 이러한 종류의를 수행 할 수 있습니까? 또는 C#에서 가장 유사한 접근법.

감사합니다,

+0

생성 대신에'operator()'는 매개 변수를 취하여 변환 된 값을 반환하여 원래 값을 대체합니까? – Skurmedel

+0

@Skurmedel : 네, 그게 내가 원하는 것입니다. – Chan

+2

미래에 귀하의 질문에 귀하가 일하는 데 익숙한 언어로 된 코드 블록이 아니라 무엇을하려고하는지에 대한보다 기술적 인 설명이 포함되어 있다면 도움이 될 것입니다. 그러면 목표 언어에 능통 한 사람들이 소스 언어에 익숙하지 않더라도 도움을 줄 수 있습니다. – unholysampler

답변

5

예, C#에서이 작업을 수행 할 수있는 표준 방법은 사용 LINQ :

Random r = new Random(); 
List<int> randomInts = Enumerable.Repeat(0,3) // create 3 dummy placeholder values 
           .Select(x => r.Next(10,100)) 
           .ToList(); 

아래 위의 코드 속보 :

Enumerable.Range(0,3)   => creates sequence of value '0' repeated 3 times 
.Select(x => r.Next(10,100)) => uses the Select (projection) operator 
            with a lambda expression to calculate 3 random 
            values (the value of x is ignored) 
.ToList()      => materializes the resulting sequence as List<int> 

.NET에서을 , LINQ (Language Integrated Query)은 시퀀스를 구성하고 조작하고 c에 대해 쿼리를 표현할 수있는 풍부한 연산자 집합을 제공합니다 귀하의 코드에서 ollections.

+0

매우 빠르고 정확합니다;) 고마워요. – Chan

+0

+1 동의 함. 그러나 NextInt가 아닌'Next' 여야합니다. – Justin

+0

@Justin : 예, 감사합니다. 나는 그것을 바로 잡았다. – LBushkin

2

는 Linq에 당신의 친구입니다 :

var myList = new List<int>() {3,1,2}; 
var rand = new Random();  
var randList = myList.Select(x=>rand.Next(10,100)).ToList(); 

선택()의 LINQ 기능을 열거 소스를 통해 반복하는 내부적으로 foreach 루프를 사용하지만, 우리는 명시 적으로 루프를 작성하지 않는 것처럼 당신의 기준을 충족하는지 이해 .

관련 문제