2012-12-13 3 views
1

을 저장할 수 없습니다내가 다음 문제가있는 구조의 내용

Series::Series (int _lookfor) 
{ 
LookFor=_lookfor; 
for (int i = 1; i<=LookFor; i++) 
    { 
    Candle cantype = Candle(i); 
    push_back(cantype); 
    } 
} 

그래서, 우리는 candle-으로 객체를 채우고이 construcor 전화 값. LookFor - 벡터 시리즈의 여러 촛불입니다. 초기화 후 나는 이러한 일련의 벡터를 초기화해야

void Series::Update() 
{ 
if (size()==LookFor) 
{ 
     if (newer(cantype,c1)) 
     { 
      Candle cantype = Candle(1); 
      Candle c1 = at(0); 
      pop_back(); 
      emplace(begin(),cantype); 
     } 
} 

을 (더 새로운 촛불이 있다면, 나는 마지막 하나를 삭제하고 벡터 시리즈의 시작에 새로운 삽입 할)이 시리즈를 업데이트하려면 :

벡터 vec; vec.push_back (Series (3));

생성자가 작업을 수행하면 월등히 좋습니다. 그러나 나는 그들을 업데이트 :

for (size_t x =0; x<=size()-1;x++) vec[x].Update(); 

나는 문제가있다 : 그것은 벡터의 변경 사항을 저장 두지. Update 메소드에서 everithing은 괜찮습니다. 필요한 촛불을 그 자체에 삽입하지만 메소드가 종료됩니다. 벡터의 상태 (vec의 각 요소)에는 아무런 변화가 없습니다. 메소드에서 우리는 변화를 봅니다.하지만 벡터가 생성자와 같은 것이 된 후에도 상태는 여전히 동일합니다. 말해줘, 제발, 내가 뭘 잘못하고있어? 다른 사람이 이미 언급 한 바와 같이

+4

은 표준 라이브러리 기능에서 파생되지 않았습니다. 특히 컨테이너가 아닙니다. – PlasmaHH

+3

잘못된 상속. [상속보다 컴포지션 선호] (http://en.wikipedia.org/wiki/Composition_over_inheritance). – Nawaz

+0

표준 컨테이너에서 상속하면 정의되지 않은 결과가 나타납니다. 수정 (상속 대신 작성)하고 문제가 해결되지 않으면 다른 질문을 게시하십시오. – utnapistim

답변

0
  • , 이러한 컨테이너에서 파생하지 않는다 (dtor 통화 및 메모리 누수 누락 등의 불쾌한 오류가 발생할 수없는 가상 소멸자는 이러한 컨테이너에 없습니다). 대신, 당신이 사적 상속을하는 경우, 벡터를 멤버로 추가하거나 그대로 두십시오.

  • 당신은 컨테이너의 반복자 인터페이스를 사용할 수 있습니다 :

당신의 작업에 대한

for(std::vector<Series>::iterator sIt = vec.begin();sIt != vec.end();++sIt) sIt->Update();

  • 는 양단 큐 또는 대신에 벡터의 원형 버퍼와 같은 목록을 사용하는 것을 고려 양초. 삽입에 더 좋을 것이므로 emplace() 또는 insert() 대신 push_front()을 사용할 수 있습니다. 또는 벡터 요소의 색인을 마지막 요소 (첫 번째 요소 여야 함) 바로 뒤에서 잡고 새로운 촛불을 할당하면 et voilà, 밀도가 높은 원형 버퍼가 생성됩니다. 같은 원형 버퍼 구현이 있습니다 예를 부스트의 하나 : 당신의 코드가 작동하지 않는 이유를 특정 상태의 변경을 방지 할 수 논리 문제에도 불구하고 http://www.boost.org/doc/libs/1_52_0/libs/circular_buffer/doc/circular_buffer.html

가, 내가 볼 수 없습니다 전혀, 적어도 당신이 게시 한 스 니펫을 통과했을 때.

+0

도와 주셔서 감사합니다! 정말로, 문제는 cicle에 있었고, 나는 iterator를 사용하지 않았습니다. 또한 이제는 std :: deque를 사용하여 컨테이너에서 파생되지 않고 std :: deque를 내 시리즈 객체의 멤버로만 추가합니다! 한 번 더 감사합니다 :) –

+0

당신을 환영합니다! – Sam

관련 문제