> 백엔드 개발 > C++ > 단일 C 컨테이너에 다양한 데이터 유형을 어떻게 저장할 수 있나요?

단일 C 컨테이너에 다양한 데이터 유형을 어떻게 저장할 수 있나요?

Linda Hamilton
풀어 주다: 2024-10-26 08:55:29
원래의
245명이 탐색했습니다.

How can I store different data types in a single C   container?

단일 C 컨테이너에 서로 다른 데이터 유형을 저장하는 방법

C에서 벡터 및 지도와 같은 컨테이너는 일반적으로 단일 C 컨테이너의 개체를 보유합니다. 데이터 유형. 그러나 동일한 컨테이너에 여러 유형의 객체를 저장하려는 시나리오가 있습니다.

이 문제를 해결하려면 Boost.Any 사용을 고려해 보세요. Boost.Any는 모든 데이터 유형을 나타낼 수 있는 템플릿 클래스입니다. Boost.Any의 인스턴스를 컨테이너에 저장할 수 있으며, 이를 통해 동일한 컬렉션 내에서 다양한 유형의 개체를 보유할 수 있습니다.

다음은 Boost.Any를 사용하는 방법에 대한 예입니다.

<code class="cpp">#include <boost/any.hpp>
#include <vector>

int main() {
  std::vector<boost::any> myContainer;

  int x = 5;
  std::string y = "Hello";
  double z = 3.14;

  // Add objects of different types to the container
  myContainer.push_back(boost::any(x));
  myContainer.push_back(boost::any(y));
  myContainer.push_back(boost::any(z));

  // Retrieve objects from the container and cast them to their original types
  int recoveredX = boost::any_cast<int>(myContainer[0]);
  std::string recoveredY = boost::any_cast<std::string>(myContainer[1]);
  double recoveredZ = boost::any_cast<double>(myContainer[2]);

  // Use the recovered objects
  std::cout << recoveredX << std::endl;
  std::cout << recoveredY << std::endl;
  std::cout << recoveredZ << std::endl;

  return 0;
}</code>
로그인 후 복사

또 다른 옵션은 사용자 정의 Union 또는 Struct를 만드는 것입니다. Union을 사용하면 동일한 메모리 위치에 다양한 데이터 유형을 저장할 수 있는 반면, 구조체는 다양한 유형의 여러 데이터 멤버를 보유할 수 있습니다. 그러나 잘못된 멤버에 액세스하면 공용체에서 정의되지 않은 동작이 발생할 수 있고, 멤버가 하나만 적극적으로 사용되는 경우 구조체는 비효율적일 수 있습니다.

궁극적으로 최선의 접근 방식은 애플리케이션의 특정 요구 사항과 제약 조건에 따라 달라집니다. 가장 적합한 솔루션을 결정하려면 각 옵션의 장단점을 고려하세요.

위 내용은 단일 C 컨테이너에 다양한 데이터 유형을 어떻게 저장할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿