1. 程式人生 > >C++ 泛型程式設計vector(成績排序)

C++ 泛型程式設計vector(成績排序)

題目描述

定義學生結構體,包括學號、及三門功課的成績和總分,按照總分從小到大輸出學生學號、總分和各門功課的成績。如果總分相同,就按第1門課的分數小到大輸出;如果第1門課的分數相同,就按第2門課的分數小到大輸出;

輸入

輸入包含n(n<20)個學生的資訊, 第1行學生人數。

第2行--第n+1行為學生資訊,包括學號、及三門功課的成績。

輸出

從小到大輸出學生學號與總分。

樣例輸入

4
1001 70 80 90
1002 60 70 80
1003 80 90 70
1004 70 85 85

樣例輸出

1002 210 60 70 80
1001 240 70 80 90
1004 240 70 85 85
1003 240 80 90 70
#include <iostream> 
#include <vector> 
#include <algorithm> 
using namespace std; 
struct stu 
{ 
    char num[10]; 
    int s[3],total; 
    bool operator <(const  struct stu &st )const   //升序排序時必須寫的函式 
	{    
     if(total!=st.total) return total<st.total; 
     else if(s[0]!=st.s[0])return s[0]<st.s[0]; 
     else if(s[1]!=st.s[1])return s[1]<st.s[1]; 
     else return s[2]<st.s[2]; 
   } 
}; 
int main() 
{ 
    int n; 
    struct stu st; 
    vector <struct stu> v; 
    cin>>n; 
    for(int i=0;i<n;i++) 
    { 
        cin>>st.num>>st.s[0]>>st.s[1]>>st.s[2]; 
        st.total=st.s[0]+st.s[1]+st.s[2]; 
        v.push_back(st);         
    } 
    sort(v.begin(),v.end()); 
    for(int j=0;j<n;j++) 
    { 
        cout<<v[j].num<<" "<<v[j].total<<" "<<v[j].s[0]<<" "<<v[j] .s[1] 
        <<" "<<v[j].s[2]<<endl; 
    }     
}  

相關推薦

C++ 程式設計vector成績排序

題目描述 定義學生結構體,包括學號、及三門功課的成績和總分,按照總分從小到大輸出學生學號、總分和各門功課的成績。如果總分相同,就按第1門課的分數小到大輸出;如果第1門課的分數相同,就按第2門課的分數小到大輸出; 輸入 輸入包含n(n<20)個學生的資訊, 第1行學

C/C++ 程式設計vector排序

題目描述 對一組輸入的資料(0結束)進行排序輸出。 約定:所有的輸入資料都為正整數,且都不大於100000。 輸入 包括多組測試資料。 每組以0結尾。 輸出  每組輸出1行。輸出排序後的資料(不含0)。 樣例輸入 1 2 3 2 4 0 5 6 2 2 0

C/C++ 程式設計stack括號匹配

題目描述 假設表示式中包含一種括號:圓括號,其巢狀順序隨意,即(()())或(())等為正確的格式,)(或((())或())均為不正確的格式。檢驗括號是否匹配可以用堆疊來實現當遇到 ( 時進棧,遇到 ) 時出棧進行匹配檢驗,如果出現不匹配的情況立即結束,否則繼續取下一個字元

C++ 程式設計國名排序

題目描述 問題描述:小李在準備明天的廣交會,明天有來自世界各國的客房跟他們談生意,小李要儘快的整理出名單給經理,你能幫他把客戶來自的國家按英文字典次序排好嗎? 例如小李手上有來自加拿大,美國,中國的名單,排好的名單應是美國,加拿大,中國 。 輸入 第1行為一個n(n&

C++ 程式設計單詞數

題目描述 lily的好朋友xiaoou333最近很空,他想了一件沒有什麼意義的事情,就是統計一篇文章裡不同單詞的總數。下面你的任務是幫助xiaoou333解決這個問題。 輸入 有多組資料,每組一行,每組就是一篇小文章。每篇小文章都是由小寫字母和空格組成,沒有標點符號,每

C++程式設計 快速排序的函式模板實現

說在前面的廢話 話說快一年沒寫過部落格了。。。 在建站之前就先用csdn寫吧 這次要說的東西也沒有啥,主要是想寫一次快排(學了這麼就快排都沒寫過你敢信 用法類似於stl裡面的sort,有兩個版本。 不知道為什麼寫了很長時間。。。這麼短的程式碼 還是感

c++ 程式設計

C++ 泛型程式設計與STL模板庫(1)---泛型程式設計簡介及STL簡介與結構 泛型程式設計的基本概念 編寫不依賴於具體資料型別的程式 將演算法從特定的資料結構中抽象出來,成為通用的 C++的模板為泛型程式設計奠定了關鍵的基礎 術語:概念 用來界定具備一

C++程式設計

面向物件程式設計關注資料,泛型程式設計關注演算法。 模板和迭代器:都是STL通用方法的組成部分,模板讓演算法獨立於資料型別,迭代器讓演算法獨立於容器型別。例如,對於在陣列和在連結串列中查詢特定值節點的find函式,模板提供了儲存在容器中的資料型別的通用表示,還需要提供遍歷容

C++程式設計:函式模板與類模板

泛型程式設計是一種語言機制,通過他可以實現一個標準的容器庫,可以處理不同的資料型別. 比如對棧的描述: class stack { push(引數型別)//入棧 pop(引數型別)//出棧 } 由於上面的程式碼與資料型別有關,可以通過模板實現一個程式碼處理不同的資料型別。 首先執行一種通

[C++]程式設計的基礎問題

例如有一個 min 函式,我們希望它相對型別是獨立的,也就是說任何類/型別都可以呼叫這個函式。如果是一個整型的數,通常我們可以這樣寫: int min(const int & a,const int &b) { return a<b?a:b; } 為了讓它適用於多個類,我們知

C++程式設計學習(三)——類模板

目錄 目錄 前言 類模板例項 類模板小結 總結 前言 C++泛型程式設計學習(二)——類模板中已經介紹瞭如何在一個檔案中,把類模板的方法和實現分開,這裡主要記錄下類模板的宣告和定義分別寫在標頭檔案中的方法。 類模板例項 功能:實現一

關於C++程式設計,模板宣告和定義最好在同一個檔案的解釋。

關於C++泛型程式設計 模板的 宣告和實現 不能分離的原因: 1.泛型-模板 template 2.模板不是變數,模板就是模板。 3.模板需要例項化成類,就像是行內函數進行替換一樣,替換模板變數 template<typename  T> 4.編譯過程     

[轉]C#程式設計

 泛型:通過引數化型別來實現在同一份程式碼上操作多種資料型別。利用“引數化型別”將型別抽象化,從而實現靈活的複用。 例子程式碼: class Program     {         static void Main(string[] args)         {    

C#列表List實現二維陣列的功能令附C#列表List基本用法總結

          // 搜尋有很多種方式,可以使用IndexOf LastIndexOf FindIndex FindLasIndex Find FindLas ,如果只是檢視元素存不,可以使用Exists()方法          // IndexOf() 方法 需要將一個物件做引數, 如果打到,就返回本

Java中的使用日常總結

一、什麼是泛型 泛型,即“引數化型別”。就是將型別由原來的具體的型別引數化,類似於方法中的變數引數,此時型別也定義成引數形式(可以稱之為型別形參),然後在使用/呼叫時傳入具體的型別(型別實參)。 例子: public static void main(String[] args) {

擦除type erasure和橋接方法bridge method

無界萬用字元會被編譯為Object,有邊界的萬用字元會被編譯為相應的邊界   正常類的繼承是不會產生這個橋接方法的。 橋接方法,一個類、介面繼承或實現某個類、介面時,會在子類中出現一個橋接方法。 這個方法不能被子類呼叫,即mn不能呼叫到這個橋接方法,但是n可以呼

C語言基礎程式設計題目函式題

6-1 簡單輸出整數 (10 分) 本題要求實現一個函式,對給定的正整數N,列印從1到N的全部正整數。 函式介面定義: void PrintN ( int N ); 其中N是使用者傳入的引數。該函式必須將從1到N的全部正整數順序打印出來,每個數字佔1行。 裁判

C語言恐怖水母問題氣泡排序

#include<stdio.h> void sort(int a[],int n) {int i,j,t;for(i=0;i<n-1;i++){for(j=0;j<n-1-i;j++){if(a[j]>a[j+1]){t=a[j];a[j]=a[j+1];a[j+1]=t; 

C#效能進階之排序遍歷後輸出元素值

而foreach語句是通過迭代變數來列舉集合的元素,為集合的每個元素執行嵌入語句。也就是說,foreach語句是通過迭代變數在集合內對其自身的引用來實現遍歷的,ArrayList類列表同樣是通過物件值引用來實現的。 而這也是稱之為強型別的原因,因為在編譯時沒有辦法告訴我們列表中資料的實際型別

effective C++筆記--模板與程式設計

文章目錄 請使用traits classes表現型別資訊 認識模板超程式設計 請使用traits classes表現型別資訊 . traits並不是C++的關鍵字或是預先定義好的構件,它們是一種技術,也是一個C++程式設計師共同遵守的協議