2012-05-15 4 views
0

나는이 일을 제대로하고 있다고 생각했지만 제대로 작동하지 않는 것 같습니다. 기본적으로 큐를 실험하고 하나의 데이터 형식을 사용하여 잘 작동하지만 이제는 다중 (기본적으로 int 및 int 목록이 있어야 함)을 추가하려고합니다.두 개 이상의 데이터 유형으로 C++ 대기열을 생성 하시겠습니까?

여기에 코드입니다 :

#include <iostream> 
#include <queue> 
using namespace std; 

int main() 
{ 
    struct product { 
     int x; 
     int y; 
    } ; 


    queue<product> q; 
    q.push(100, 100); 
    q.push(200, 100); 
    q.push(300, 100); 
    q.push(400, 100); 

    cout << "Size of the queue: " << q.size() << endl; 

    while (!q.empty()) { 
     cout << q.front() << endl; 
     q.pop(); 
    } 

} 

그것은 구조체없이 작동하지만, 분명히 그것은 단지 그 방법 큐의 각 항목에 대해 하나 개의 변수를 받아들입니다. 여러 항목을 가질 수있는 방법이 있습니까?

+0

당신의 질문이 불분명하다. 여러 항목을 추가하면 무엇을 의미합니까? – Attila

+0

@Attila 대기열 항목 당 여러 데이터 유형이 포함 된 대기열을 원합니다. 따라서이 예에서 대기열의 각 항목에는 두 개의 int가 있습니다. – Lostsoul

+0

두 개 이상의 데이터 유형으로 '대기열'을 가질 수는 없지만 여러 데이터 유형에 대해 말 변형의'대기열 '을 가질 수 있습니다. 부스트를 찾아 봐. 변이. –

답변

3

.

다른 사람이 이미 언급했듯이
struct product { 
    int x; 
    int y; 
} ; 

int main() 
{ 

는 두 인수를 받아 그 product에 생성자를 추가 :에 변경

struct product { 
    int x; 
    int y; 
    product(int a_x, int a_y) : x(a_x), y(a_y) {} 
}; 

... 

q.push_back(product(100, 100)); 

는 또한 product 출력 operator<< 과부하 수 :

std::ostream& operator<<(std::ostream& a_out, const product& a_p) 
{ 
    a_out << "product(" << a_p.x << ", " << a_p.y << ")"; 
    return a_out; 
} 

while (!q.empty()) { 
    cout << q.front() << endl; 
    q.pop(); 
} 
+0

그리고 다른 사람들이 말한 생성자. – RedX

+0

+1 그게 다야! – Lostsoul

+0

흥미롭게도 로컬 유형은 VS 2010에서 템플릿 매개 변수로 정의 할 수 있습니다. VS에서 응답으로 작성한 코드는 VS 2010에서 제대로 작동합니다. – Jaywalker

2

다음은 기본 화면의 모습입니다. 생성자 product(int i, int j)을 추가하고 요소를 추가 할 때 생성자를 q에 사용합니다.

int main() 
{ 
    struct product { 
     int x; 
     int y; 

     product (int i, int j) : x(i), y(j) {} 
    } ; 

    queue<product> q; 
    q.push(product (100, 100)); 
    q.push(product (200, 100)); 
    q.push(product (300, 100)); 
    q.push(product (400, 100)); 

    cout << "Size of the queue: " << q.size() << endl; 

    while (!q.empty()) { 
     cout << q.front().x << ", " << q.front().y << endl; 
     q.pop(); 
    } 

    return 0; 
} 
+0

그것은 나를 위해 작동하지 않는 것 같습니다. 나는 많은 실수를한다. '; '앞에 선언문에 유효하지 않은 타입이 있습니다. – Lostsoul

+0

첫 번째 4 개의 오류는'queue q;' – Lostsoul

+0

행의'hmjd '응답과 관련이 있습니다. 생성자가 누락되어 로컬로 선언 할 수 없습니다. – Lostsoul

2

q.push(100, 100)queue::push()은 하나의 매개 변수를, 유효하지 않습니다. 당신은 대신 product를 밀어해야합니다

product p(100, 100); 
q.push(p); 

이 그럼 당신은 (제품 stucture에 저장) 대기열에 모두 100 단위가 있습니다.

당신이 (avoud 슬라이스로) 대신 값 자체의 모두 product1product2, 당신은 (베이스에) 공통 모두 확장 기본 구조 및 저장 포인터가 필요합니다 저장하려면

. 이 시점에서 struct

3

메서드 대신 class을 사용할 수도 있습니다. queue::push 메서드는 대기열 유형이어야하는 하나의 매개 변수를 필요로합니다. 이처럼보십시오 : 당신은 또한 당신의 구조체에 대한 생성자를 정의해야 할 것

queue<product> q; 
q.push(product(100, 100)); 
q.push(product(200, 100)); 
q.push(product(300, 100)); 
q.push(product(400, 100)); 

: 나는 로컬 정의 할 수없는 템플릿 유형에 대해 지정된 유형을 생각

struct product { 
    int x; 
    int y; 
    product(int _x, int _y) : x(_x), y(_y) {} 
} ; 
+0

동일한 오류가 발생합니다 (접근 방법은 Jaywalker와 동일합니다). 당신의 생성자 나 그의 생성자를 사용한다면 여전히 같은 문제가 발생합니다. – Lostsoul

관련 문제