나는 C ++에 상당히 익숙하고 객체의 벡터를 만들고 그 멤버를 초기화하려고 시도하고 있지만 올바르게 수행하고 있는지 확실하지 않은 비트가 있습니다.
vector<Card> cardStorage;
for (int i = 0; i < 20; i++) {
Card card;
cardStorage.push_back(card);
}
기본적으로 이것은 Card 클래스의 20 개 객체의 벡터이며 push_back은 참조로 전달되는 Card & 유형을 취합니다. 따라서 이렇게하면 20 개의 서로 다른 Card 개체의 벡터가 생성되는지 또는 벡터의 20 개 구성원 모두가 하나의 개체를 가리킬 지 확실하지 않습니다.이 벡터를 조작하기 위해이 벡터를 통과해야하기 때문에 원하는 것이 아닙니다. 개체 데이터 멤버 (명백하게 나쁜 습관이기 때문에 Card 클래스의 20 개 개체를 생성하여 벡터로 푸시하고 싶지도 않습니다).
push_back
on a vector
는 인수가 l- 값 (이름이있는 개체) 인 경우 전달 된 인수 의 복사본 을 만듭니다 . 그래서 cardStorage
20 별개이 보장 Card
각이 있기 때문에, 루프가 실행 된 후에 개체를 Card
에 복사됩니다 vector
.
emplace_back
불필요하게 Card
s를에 복사하는 것을 방지하기 위해를 사용 하는 것을 고려할 수 vector
있지만 다음과 같이 간단하게 수행 할 수도 있습니다.
vector<Card> cardStorage(20);
표시된 코드와 동일한 효과를 얻습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다