Từ 1 tới 5 trên tổng số 5 kết quả

Đề tài: Cho em hỏi về Template

  1. #1
    Ngày gia nhập
    03 2008
    Bài viết
    3

    Mặc định Cho em hỏi về Template

    " Viết hàm/ lớp template để sắp tăng/giảm một mảng với kiểu dữ liệu bất kỳ : int ,float, double, SinhVien ( Struct / Class Sinhvien ) ".
    Em chưa hiểu rõ về template.
    Anh (chị) có thể cho em vài ý kiến cho bài tập trên không ạ?
    Em xin cám ơn.

  2. #2
    Ngày gia nhập
    10 2007
    Nơi ở
    /root
    Bài viết
    318

    Bạn chưa hiểu chỗ nào , phải nói ra thì người khác mới biết chứ .
    Lớp Sinh Viên thì sắp xếp tăng giảm theo cái gì (Điểm , Năm sinh ....)?
    Đã được chỉnh sửa lần cuối bởi Tab : 22-05-2008 lúc 06:19 PM.

  3. #3
    Ngày gia nhập
    03 2008
    Bài viết
    3

    Em không hiểu cách dùng class template.
    Bài này tăng/giảm 1 mảng với 1 kiểu dữ liệu bất kỳ theo điểm trung bình (trong đó đặc biệt em không biết cách xài với struct)

  4. #4
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    Đây là 1 ví dụ đơn giản, trong struct thì swap cả struct tuy nhiên nếu vậy thì struct đó phải có định nghĩa lại toán tử < và >. Template cơ bản thì ok, nhưng rules của nó cũng rất nhiều ( nó khó không thua 1 ly so với OOP trong C++ ). Cậu tìm cuốn "The complete Guide Template" của David Vandevoorde và Nicolai M. Josuttis mà đọc để hiểu cơ bản trước, sau đó sẽ tìm đọc những cuốn nâng cao hơn.
    Đây là ví dụ sort :
    C++ Code:
    1. #include <iostream>
    2.  
    3. template< typename T >
    4. void swap2Item( T& lhs, T& rhs )
    5. {
    6.     T temp = lhs;
    7.     lhs = rhs;
    8.     rhs = temp;
    9. }
    10.  
    11. template< typename T >
    12. void selectionSort( T* ary, unsigned size )
    13. {
    14.     int outer,
    15.         inner,
    16.         min_index;
    17.     T  min_value;
    18.  
    19.     for( outer = 0; outer < size - 1; ++outer )
    20.     {
    21.         min_index = outer;
    22.         min_value = ary[ outer ];
    23.         for( inner = outer + 1; inner < size; ++inner )
    24.         {
    25.             if( ary[ inner ] < min_value )
    26.             {
    27.                 min_value = ary[ inner ];
    28.                 min_index = inner;
    29.             }
    30.         }
    31.         swap2Item< T >( ary[ min_index ], ary[ outer ] );
    32.     }
    33. }
    34.  
    35. template< typename T >
    36. void showAry( T* ary, int size )
    37. {
    38.     int index;
    39.     for( index = 0; index < size; ++index )
    40.     {
    41.         std::cout << ary[ index ] << "-";
    42.     }
    43.     std::cout << "\n";
    44. }
    45.  
    46. int main()
    47. {
    48.     int ary[ 4 ] = { 3, 2, 5, 1 };
    49.     selectionSort< int >( ary, 4 );
    50.     showAry< int >( ary, 4 );
    51.     return 0;
    52. }
    Và đây là struct :
    C++ Code:
    1. #include <iostream>
    2. #include <string>
    3.  
    4. struct StudentType
    5. {
    6.     std::string name;
    7.     double      average;
    8.     bool operator <( const StudentType& rhs)
    9.     {
    10.         return average < rhs.average;
    11.     }
    12. };
    13.  
    14. template< typename T >
    15. void swap2Item( T& lhs, T& rhs )
    16. {
    17.     T temp = lhs;
    18.     lhs = rhs;
    19.     rhs = temp;
    20. }
    21.  
    22. template< typename T >
    23. void selectionSort( T* ary, unsigned size )
    24. {
    25.     int outer,
    26.         inner,
    27.         min_index;
    28.     T   min_value;
    29.  
    30.     for( outer = 0; outer < size - 1; ++outer )
    31.     {
    32.         min_index = outer;
    33.         min_value = ary[ outer ];
    34.         for( inner = outer + 1; inner < size; ++inner )
    35.         {
    36.             if( ary[ inner ] < min_value )
    37.             {
    38.                 min_value = ary[ inner ];
    39.                 min_index = inner;
    40.             }
    41.         }
    42.         swap2Item< T >( ary[ min_index ], ary[ outer ] );
    43.     }
    44. }
    45.  
    46. template< typename T >
    47. void showAry( T* ary, int size )
    48. {
    49.     int index;
    50.     for( index = 0; index < size; ++index )
    51.     {
    52.         std::cout << ary[ index ] << "-";
    53.     }
    54.     std::cout << "\n";
    55. }
    56.  
    57. int main()
    58. {
    59.     StudentType ary_of_student[ 3 ];
    60.     ary_of_student[ 0 ].name = "A";
    61.     ary_of_student[ 0 ].average = 0.3;
    62.     ary_of_student[ 1 ].name = "B";
    63.     ary_of_student[ 1 ].average = 0.5;
    64.     ary_of_student[ 2 ].name = "C";
    65.     ary_of_student[ 2 ].average = 0.1;
    66.  
    67.     selectionSort< StudentType >( ary_of_student, 3 );
    68.     for( int x = 0; x < 3; ++x )
    69.     {
    70.         std::cout << ary_of_student[ x ].average << "-";
    71.     }
    72.  
    73.     return 0;
    74. }

  5. #5
    Ngày gia nhập
    03 2008
    Bài viết
    3

    Dạ, em cám ơn. Em sẽ tìm hiểu kỹ vấn đề này. Vì cuối kỳ, đề của bọn em là tối ưu mã nguồn. Template là 1 trong những phần đó.

Các đề tài tương tự

  1. Lập trình C++ template là gì? sử dụng template như thế nào?
    Gửi bởi dangvanhoavc trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 5
    Bài viết cuối: 16-01-2013, 09:11 PM
  2. Kỹ thuật C++ Template Method có liên quan gì đến template trong C++ ko?
    Gửi bởi ten_truycap trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 22-10-2010, 11:26 PM
  3. Cách xây dựng và sử dụng template và mảng template trong C++?
    Gửi bởi nhatnha trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 4
    Bài viết cuối: 03-08-2010, 06:24 PM
  4. template
    Gửi bởi wawa trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 6
    Bài viết cuối: 10-01-2009, 07:36 PM
  5. C++ template( ko hiểu sai chỗ nào)!!
    Gửi bởi thaiboss trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 5
    Bài viết cuối: 28-11-2008, 11:13 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn