C+tuple 모듈 의 기본 용법(총괄)

9411 단어 C++tuple원조
1.원조 소개
    tuple 은 고정 크기 의 서로 다른 유형 값 의 집합 으로 일반화 된 std:pair 입 니 다.우 리 는 또한 그 를 통용 되 는 구조 체 로 사용 할 수 있다.구조 체 를 만 들 필요 가 없고 구조 체 의 특징 을 얻 을 필요 가 없다.어떤 상황 에서 구조 체 를 대체 하여 프로그램 을 더욱 간결 하고 직관 적 으로 할 수 있다.std::tuple 이론 적 으로 수많은 임의의 유형의 구성원 변 수 를 가 질 수 있 습 니 다.std:pair 는 2 명의 구성원 만 있 을 수 있 기 때문에 3 개 이상 의 데 이 터 를 저장 해 야 할 때 tuple 모듈 을 사용 해 야 합 니 다.
    tuple(원 그룹)이 c+11 에서 인용 하기 시 작 했 습 니 다.tuple 은 간단 해 보이 지만 간단 하지 않 습 니 다.c+11 의 간단 하면 서도 복잡 한 동쪽 이 라 고 할 수 있 습 니 다.간단 한 면 은 쉽게 사용 할 수 있 습 니 다.복잡 한 면 은 내부 에 너무 많은 디 테 일 을 숨 기 고 신비 로 운 베일 을 벗 길 때 어렵 습 니 다.
2,tuple 생 성 및 초기 화

 std::tuple<T1, T2, TN> t1;  //      tuple  (      ),         T1 T2...Tn  ,      。
std::tuple<T1, T2, TN> t2(v1, v2, ... TN); //    tuple  ,         T1 T2 ...Tn  ;            tuple   get<Ith>(obj)    (Ith     tuple       ,        )。
std::tuple<T1&> t3(ref&); // tuple            
std::make_tuple(v1, v2); //  pair       make_tuple      tuple  
tuple 의 요소 형식 은 참조:

std::string name;
std::tuple<string &, int> tpRef(name, 30);
//  tpRef       ,  name     -   
std::get<0>(tpRef) = "Sven";
 
// name    Sven
std::cout << "name: " << name << '
';
3.tuple 요소 에 대한 조작
등가 구조 체
처음에 tuple 은 구조 체 와 같이 사용 할 수 있 고 편리 하면 서도 빠르다 고 말 한 적 이 있다.예:

struct person {
 char *m_name;
 char *m_addr;
 int *m_ages;
};
 
//   tuple            ,      。
std::tuple<const char *, const char *, int>
tuple 요소 개 수 를 가 져 오 는 방법
tuple 대상 이 있 지만 얼마나 많은 요소 가 다음 과 같이 조회 할 수 있 는 지 모 르 겠 습 니 다.

// tuple_size
#include <iostream> // std::cout
#include <tuple> // std::tuple, std::tuple_size
 
int main ()
{
 std::tuple<int, char, double> mytuple (10, 'a', 3.14);
 
 std::cout << "mytuple has ";
 std::cout << std::tuple_size<decltype(mytuple)>::value;
 std::cout << " elements." << '
'; return 0; } // : mytuple has 3 elements
요소 의 값 을 가 져 오 는 방법
tuple 대상 요소 의 값 을 가 져 오 는 것 은 get(obj)방법 으로 얻 을 수 있 습 니 다.
Ith-가 져 오고 싶 은 요소 가 tuple 대상 에 있 는 위치 입 니 다.
obj-tuple 을 가 져 오 려 는 대상 입 니 다.

// tuple_size
#include <iostream> // std::cout
#include <tuple> // std::tuple, std::tuple_size
 
int main ()
{
 std::tuple<int, char, double> mytuple (10, 'a', 3.14);
 
 std::cout << "mytuple has ";
 std::cout << std::tuple_size<decltype(mytuple)>::value;
 std::cout << " elements." << '
'; // std::cout << "the elements is: "; std::cout << std::get<0>(mytuple) << " "; std::cout << std::get<1>(mytuple) << " "; std::cout << std::get<2>(mytuple) << " "; std::cout << '
'; return 0; } // : mytuple has 3 elements. the elements is: 10 a 3.14
   tuple 은 교체 가 지원 되 지 않 습 니 다.요소 색인(또는 tie 패키지 해제)을 통 해 요소 의 값 을 가 져 올 수 있 습 니 다.그러나 주어진 색인 은 컴 파일 러 에 지정 되 어 있어 야 합 니 다.실행 기간 에 동적 으로 전달 할 수 없습니다.그렇지 않 으 면 컴 파일 오류 가 발생 합 니 다.

for(int i=0; i<3; i++)
 std::cout << std::get<i>(mytuple) << " "; //       
원소 의 종류 가 져 오기
 원소 유형 을 얻 으 려 면 tupleelement 방법 을 가 져 옵 니 다.다음 원 그룹 대상 이 있 으 면:

std::tuple<std::string, int> tp("Sven", 20);
 
//          
 
std::tuple_element<1, decltype(tp)>::type ages; // ages  int  
 
ages = std::get<1>(tp);
 
std::cout << "ages: " << ages << '
'; // : ages: 20
tie 를 이용 하여 패키지 요소 의 값 을 해제 합 니 다.
 pair 처럼 tie 를 통 해 tuple 의 각 요 소 를 풀 수 있 는 값 입 니 다.다음 tuple 대상 은 4 개의 요소 가 있 습 니 다.tie 를 통 해 이 4 개의 요소 의 값 을 각각 tie 가 제공 하 는 4 개의 변수 에 할당 합 니 다.

#include <iostream>
#include <tuple>
#include <utility>
 
int main(int argc, char **argv) {
 std::tuple<std::string, int, std::string, int> tp;
 tp = std::make_tuple("Sven", 25, "Shanghai", 21);
 
 //       
 std::string name;
 std::string addr;
 int ages;
 int areaCode;
 
 std::tie(name, ages, addr, areaCode) = tp;
 std::cout << "Output: " << '
'; std::cout << "name: " << name <<", "; std::cout << "addr: " << addr << ", "; std::cout << "ages: " << ages << ", "; std::cout << "areaCode: " << areaCode << '
'; return 0; } // : Output: name: Sven, addr: Shanghai, ages: 25, areaCode: 21
그러나 가끔 tuple 에 포 함 된 여러 요소 가 있 을 때 그 중의 하나 또는 두 요소 만 필요 합 니 다.그러면 std:ignore 를 통 해 변 수 를 차지 할 수 있 습 니 다.그러면 해당 하 는 요 소 를 추출 하 는 것 을 무시 할 수 있 습 니 다.상기 규칙 을 수정 할 수 있 습 니 다.

#include <iostream>
#include <tuple>
#include <utility>
 
int main(int argc, char **argv) {
 std::tuple<std::string, int, std::string, int> tp;
 tp = std::make_tuple("Sven", 25, "Shanghai", 21);
 
 //       
 std::string name;
 std::string addr;
 int ages;
 int areaCode = 110;
 
 std::tie(name, ages, std::ignore, std::ignore) = tp;
 std::cout << "Output: " << '
'; std::cout << "name: " << name <<", "; std::cout << "addr: " << addr << ", "; std::cout << "ages: " << ages << ", "; std::cout << "areaCode: " << areaCode << '
'; return 0; } // : Output: name: Sven, addr: , ages: 25, areaCode: 110
tuple 요소 참조
      앞에서 tuple 로 인 용 될 요소 형식 을 열거 하 였 습 니 다.다음은 코 디 Make 참조tuple()은 tuple 의 요소 값 을 추출 하여 일부 변수 값 을 설정 하고 이 변 수 를 변경 하여 tuple 요소 의 값 을 변경 할 수 있 습 니 다.

#include <iostream>
#include <tuple>
#include <functional>
 
int main(int argc, char **agrv) {
 
 std::tuple<std::string, int, float> tp1("Sven Cheng", 77, 66.1);
 
 std::string name;
 int weight;
 float f;
 
 auto tp2 = std::make_tuple(std::ref(name), std::ref(weight), std::ref(f)) = tp1;
 
 std::cout << "Before change: " << '
'; std::cout << "name: " << name << ", "; std::cout << "weight: " << weight << ", "; std::cout << "f: " << f << '
'; name = "Sven"; weight = 80; f = 3.14; std::cout << "After change: " << '
'; std::cout << "element 1st: " << std::get<0>(tp2) << ", "; std::cout << "element 2nd: " << std::get<1>(tp2) << ", "; std::cout << "element 3rd: " << std::get<2>(tp2) << '
'; return 0; } // : Before change: name: Sven Cheng, weight: 77, f: 66.1 After change: element 1st: Sven, element 2nd: 80, element 3rd: 3.14
tuple 교환

tuple<int, std::string, float> t4(11, "Test", 3.14);
cout << get<0>(t3) << " " << get<0>(t4) << endl;
t3.swap(t4); 
cout << get<0>(t3) << " " << get<0>(t4) << endl;
정렬

bool cmp(tuple<string,int,char> a,tuple<string,int,char> b){
 return a<b;
 return get<1>(a)<get<1>(b); //         
}
main(){
 tuple<string,int,char> my_tuple[10];
 my_tuple[0] = std::make_tuple ("Pipr",42,'a');
 my_tuple[1] = std::make_tuple ("Piper",41,'a');
 my_tuple[2] = std::make_tuple ("Pper",45,'a');
 my_tuple[3] = std::make_tuple ("Pier",49,'a');
 for(int i=0;i<4;++i){
 cout << get<0>(my_tuple[i]) << " " << get<1>(my_tuple[i]) << " ";
 }
 cout << endl;
 sort(my_tuple,my_tuple+4,cmp);
 for(int i=0;i<4;++i){
 cout << get<0>(my_tuple[i]) << " " << get<1>(my_tuple[i]) << " ";
 }
 cout << endl;
}
C++tuple 모듈 의 기본 용법(총괄)에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 관련 C++tuple 모듈 의 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 부 탁 드 리 겠 습 니 다!

좋은 웹페이지 즐겨찾기