C ++에서 가장 좋은 방법으로 클래스 멤버 벡터의 요소를 반복하는 방법은 무엇입니까?

GreatName

나는이 class멤버가있는을 vector<class B>. 나는 이것을 A vector외부 class에서 깨끗한 방식 으로 반복하고 싶습니다 . 공개 기능을 사용하여 B에 대한 작업을 수행해야합니다.

이를 위해 int get_next_element(B * in_B)다음 요소를 올바르게로드했으면 0을 반환하고 그렇지 않으면 -1을 반환 할 수 있는 함수가 있다고 생각했습니다 .

나는를 사용하여 이것을 생각 iterator했지만 이것으로 두 가지 문제를 발견했습니다. 우선, iterator를 a 로 변환하는 깔끔한 방법을 찾을 수 없었 습니다 pointer( 를 a iterator와 같이 사용할 수있는 것 같지만 이것이 pointer좋은 솔루션인지 확실하지 않습니다). 둘째, my iterator에서 참조하는 값이 있는지 확인 해야합니다. "null 반복자"에 가장 가까운 것이 .end()요소 이기 때문에 어떻게 초기화할지 알 수 없습니다. 초기화 (비어 있음)하고 .end()참조가 있으면 무언가를 추가하면 비교할만한 것을 참조하지 않습니다.

내가 int어떤 요소에 있는지 추적 하는 추가 기능 가질 수 있지만 int요소를 추가 할 때마다 관리해야합니다 .

반복 코드를 classA 외부에 배치하는 것을 고려 했지만 루프 중에 개별 요소를 변경하거나 액세스해야 할 수 있으므로 복잡하고 큰 반복 블록을 만들 수 있습니다.

이 문제를 어떻게 깔끔하게 (예 :) 해결할 수 int get_next_element(B * in_b)있습니까?

편집 : 여기에 몇 가지 코드가 있습니다 : 헤더 :

class B {
  public:
    B();
    void set_size(int in_size);
    int get_size();
  protected:
    int mSize;
};

class A {
  public:
    A();
    void add_B(B in_B);
    int get_next_element(B * in_B);
  protected:
    std::vector<B> mObjects;
};

cpp 파일 :

B::B() {
  // Stuff
}
void B::set_size(int in_size) {
  mSize = in_size;
}
int B::get_size() {
  return mSize;
}

A::A() {
  // Stuff
}
void A::add_B(B in_B) {
  mObjects.push_back(in_B);
}
int A::get_next_element(B * in_B) {
  // ToDo : handle elements
}

그리고 주요 :

int main() {
  A test_a;
  for (int i = 0; i < 5; i++) {
    B tmp_b;
    tmp_b.set_size(i);
    test_a.add_B(tmp_b);
  }
  B iterator_b;
  while (0 == get_next_element(& iterator_b)) {
    if (iterator_b.get_size > 2) {
      B tmp_b;
      tmp_b.set_size(iterator_b.get_size - 2);
      test_a.add_B(tmp_b);
      iterator_b.set_size(2);
    }
  }
}

따라서 기본적으로 A많은 Bs를 보유하고 메인이 그들을 통해 반복하고 (이 예에서는) main. 이 작업이 수행되는 몇 가지 차원 / 방법이 있습니다. 이것이 부분적으로 .NET의 코드만큼 "숨기기"를 원하는 이유입니다 A.

(이것은 Bs가 내부 관계를 가져야 할 수도 있지만 기본적으로 아이디어입니다)

Lakeweb

이것이 제가 의미하는 바입니다 ...

#include <iostream>
#include <vector>

class B {
public:
    B(int in) :mSize(in) {}
    size_t mSize;
    void set_size(int in_size) {    mSize = in_size;}
    int get_size() {return mSize;}
};

class A {
    using container = std::vector<B>;
    using iterator = container::iterator;
    container mObjects;
public:
    void add_B(B in_B) { mObjects.push_back(in_B); }
    iterator begin() { return mObjects.begin(); }
    iterator end() { return mObjects.end(); }
};


int main() {
    A test_a;
    for (int i = 0; i < 5; i++) {
        test_a.add_B(B(i));
    }
    for( auto& item : test_a)
        if (item.get_size() > 2) {
            B tmp_b(item.get_size() - 2);
            item.set_size(2);
            test_a.add_B(tmp_b);
            break;//if using a vector, must break as vector can change/reallocate on 'add_B()'
    }
}

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

C ++의 함수에서 벡터를 반환하는 가장 좋은 방법은 무엇입니까?

분류에서Dev

C ++ 파생 클래스의 인스턴스를 복사하는 가장 좋은 방법은 무엇입니까

분류에서Dev

클래스 멤버를 초기화하는 가장 좋은 방법은 무엇입니까?

분류에서Dev

C ++에서 다른 유형의 여러 데이터 멤버가있는 클래스를 처리하는 방법은 무엇입니까?

분류에서Dev

클래스의 가변 멤버를 자동으로 업데이트하는 방법은 무엇입니까?

분류에서Dev

C ++에서 클래스의 객체를 복사하는 가장 좋은 방법

분류에서Dev

C ++ 클래스의 개인 멤버로 일반 함수 포인터를 얻는 방법은 무엇입니까?

분류에서Dev

추상 기본 클래스에서 추상 클래스 멤버로 작업하는 가장 좋은 방법은 무엇입니까?

분류에서Dev

Python 클래스의 메서드를 장식하는 가장 좋은 방법은 무엇입니까?

분류에서Dev

벡터에서 0 (또는 일반적으로 k)보다 큰 가장 작은 요소를 찾는 가장 좋은 방법은 무엇입니까?

분류에서Dev

클래스가 해당 멤버를 반복적으로 평가하기 위해 메서드에서 사용할 클래스 멤버에 대한 인수로 함수를 전달하는 방법은 무엇입니까?

분류에서Dev

자바 : 개체 데이터 멤버를 파일에 쓰는 가장 좋은 방법은 무엇입니까?

분류에서Dev

클래스 정의 내에서 포인터 멤버 함수를 호출하는 방법은 무엇입니까?

분류에서Dev

C ++에서 단일 클래스를 동적으로 할당하는 가장 좋은 방법은 무엇입니까?

분류에서Dev

C에서 void 포인터로 정수를 저장하는 가장 좋은 방법은 무엇입니까?

분류에서Dev

반복자를 사용하여 C ++에서 여러 크기의 여러 목록을 동시에 반복하는 가장 좋은 방법은 무엇입니까?

분류에서Dev

NumPy에서 행 벡터를 정의하는 가장 좋은 방법은 무엇입니까?

분류에서Dev

벡터에 클래스 멤버를 추가하고 올바르게 사용하는 방법은 무엇입니까?

분류에서Dev

템플릿 클래스의 멤버 함수에 포인터를 전달하는 방법은 무엇입니까?

분류에서Dev

Qt 객체 (QgraphicsItem)를 C ++ 클래스 객체로 변환하는 가장 좋은 방법은 무엇입니까?

분류에서Dev

사용자에게 클래스 a에 2 개의 정수를 입력하고 클래스 b에 추가하고 클래스 C에 표시 기능을 갖도록 요청하는 가장 좋은 방법은 무엇입니까?

분류에서Dev

구성 요소 속성에서 클래스 멤버에 액세스하는 방법은 무엇입니까?

분류에서Dev

Android 앱에서 서버의 데이터베이스로 데이터를 전송하는 가장 좋은 방법은 무엇입니까?

분류에서Dev

클래스의 멤버 함수에서 클래스 인스턴스를 반환하는 방법은 무엇입니까?

분류에서Dev

Android의 서버에 여러 이미지를 업로드하는 가장 좋은 방법은 무엇입니까?

분류에서Dev

입력 라인을 취하고 라인의 단어를 C ++의 벡터에 추가하는 가장 좋은 방법은 무엇입니까?

분류에서Dev

Java에서 기본 래퍼 클래스를 만드는 가장 좋은 방법은 무엇입니까?

분류에서Dev

자바 스크립트에서 함수를 반복적으로 반복하는 가장 좋은 방법은 무엇입니까?

분류에서Dev

std :: function 또는 Boost를 사용하여 C ++에서 클래스 멤버 포인터를 구현하는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    C ++의 함수에서 벡터를 반환하는 가장 좋은 방법은 무엇입니까?

  2. 2

    C ++ 파생 클래스의 인스턴스를 복사하는 가장 좋은 방법은 무엇입니까

  3. 3

    클래스 멤버를 초기화하는 가장 좋은 방법은 무엇입니까?

  4. 4

    C ++에서 다른 유형의 여러 데이터 멤버가있는 클래스를 처리하는 방법은 무엇입니까?

  5. 5

    클래스의 가변 멤버를 자동으로 업데이트하는 방법은 무엇입니까?

  6. 6

    C ++에서 클래스의 객체를 복사하는 가장 좋은 방법

  7. 7

    C ++ 클래스의 개인 멤버로 일반 함수 포인터를 얻는 방법은 무엇입니까?

  8. 8

    추상 기본 클래스에서 추상 클래스 멤버로 작업하는 가장 좋은 방법은 무엇입니까?

  9. 9

    Python 클래스의 메서드를 장식하는 가장 좋은 방법은 무엇입니까?

  10. 10

    벡터에서 0 (또는 일반적으로 k)보다 큰 가장 작은 요소를 찾는 가장 좋은 방법은 무엇입니까?

  11. 11

    클래스가 해당 멤버를 반복적으로 평가하기 위해 메서드에서 사용할 클래스 멤버에 대한 인수로 함수를 전달하는 방법은 무엇입니까?

  12. 12

    자바 : 개체 데이터 멤버를 파일에 쓰는 가장 좋은 방법은 무엇입니까?

  13. 13

    클래스 정의 내에서 포인터 멤버 함수를 호출하는 방법은 무엇입니까?

  14. 14

    C ++에서 단일 클래스를 동적으로 할당하는 가장 좋은 방법은 무엇입니까?

  15. 15

    C에서 void 포인터로 정수를 저장하는 가장 좋은 방법은 무엇입니까?

  16. 16

    반복자를 사용하여 C ++에서 여러 크기의 여러 목록을 동시에 반복하는 가장 좋은 방법은 무엇입니까?

  17. 17

    NumPy에서 행 벡터를 정의하는 가장 좋은 방법은 무엇입니까?

  18. 18

    벡터에 클래스 멤버를 추가하고 올바르게 사용하는 방법은 무엇입니까?

  19. 19

    템플릿 클래스의 멤버 함수에 포인터를 전달하는 방법은 무엇입니까?

  20. 20

    Qt 객체 (QgraphicsItem)를 C ++ 클래스 객체로 변환하는 가장 좋은 방법은 무엇입니까?

  21. 21

    사용자에게 클래스 a에 2 개의 정수를 입력하고 클래스 b에 추가하고 클래스 C에 표시 기능을 갖도록 요청하는 가장 좋은 방법은 무엇입니까?

  22. 22

    구성 요소 속성에서 클래스 멤버에 액세스하는 방법은 무엇입니까?

  23. 23

    Android 앱에서 서버의 데이터베이스로 데이터를 전송하는 가장 좋은 방법은 무엇입니까?

  24. 24

    클래스의 멤버 함수에서 클래스 인스턴스를 반환하는 방법은 무엇입니까?

  25. 25

    Android의 서버에 여러 이미지를 업로드하는 가장 좋은 방법은 무엇입니까?

  26. 26

    입력 라인을 취하고 라인의 단어를 C ++의 벡터에 추가하는 가장 좋은 방법은 무엇입니까?

  27. 27

    Java에서 기본 래퍼 클래스를 만드는 가장 좋은 방법은 무엇입니까?

  28. 28

    자바 스크립트에서 함수를 반복적으로 반복하는 가장 좋은 방법은 무엇입니까?

  29. 29

    std :: function 또는 Boost를 사용하여 C ++에서 클래스 멤버 포인터를 구현하는 방법은 무엇입니까?

뜨겁다태그

보관