C++中pair的用法以及函式的多個返回值的用法
注意:文章為轉載多人的部落格,我只是綜合一下。
pair的型別:
pair 是 一種模版型別。每個pair 可以儲存兩個值。這兩種值無限制。也可以將自己寫的struct的物件放進去。。
pair<string,int> p;
pair<int ,int > p;
pair<double,int> p;
都可以。。。
應用:如果一個函式有兩個返回值 的話,如果是相同型別,就可以用陣列返回,如果是不同型別,就可以自己寫個struct ,但為了方便就可以使用 c++ 自帶的pair ,返回一個pair,其中帶有兩個值。除了返回值的應用,在一個物件有多個屬性的時候 ,一般自己寫一個struct ,如果就是兩個屬性的話,就可以用pair 進行操作。。。
應用pair 可以省的自己寫一個struct 。。。如果有三個屬性的話,其實也是可以用的pair 的 ,極端的寫法 pair <int ,pair<int ,int > >
寫法極端。(後邊的兩個 > > 要有空格,否則就會是 >> 位移運算子)
makr_pair:
pair<int ,int >p (5,6);
pair<int ,int > p1= make_pair(5,6);
pair<string,double> p2 ("aa",5.0);
pair <string ,double> p3 = make_pair("aa",5.0);
有這兩種寫法來生成一個pair。
如何取得pair的值呢。。
每個pair 都有兩個屬性值 first 和second
cout<<p1.first<<p1.second;
注意是屬性值而不是方法。
由於pair型別的使用比較繁瑣,因為如果要定義多個形同的pair型別的時候,可以時候typedef簡化宣告:
typedef pair<string, string> author;
author pro("May", "Lily");
author joye("James", "Joyce");
pair的使用:
#include <cstdio> #include <algorithm> #include <iostream> #include <string> #include <map> #include <vector> #include <set> #include <cmath> #include <stack> #include <queue> #include <cstring> #include <utility> using namespace std; #define ll long long #define llu unsigned long long #define INF 100000000 //使用pair表示狀態時,使用typedef會更加方便一些 const int maxn = 100+10; typedef pair<int, int> P; char maze[maxn][maxn];//表示迷宮的字串陣列 int n,m; int sx,sy;//起點座標 int gx,gy;//重點座標 int d[maxn][maxn]; //到各個位置的最短距離的陣列 //四個方向移動的向量 int dx[4] = {1,0,-1,0}, dy[4] = {0,1,0,-1}; //求從(sx,sy)到(gx,gy)的最短距離 //如果無法到達,則是INF int bfs() { queue<P > que; // 把所有的位置都初始化為INF for(int i = 0; i < n; ++i) for(int j = 0; j < m; ++j) d[i][j] = INF; //將起點加入佇列,並把這一地點的距離設定為0 que.push(P(sx,sy)); d[sx][sy] = 0; //不斷迴圈直到佇列的長度為0 while(que.size()) //while(!que.empty()) { //從佇列的最前端取出元素 P p = que.front(); // cout << p.first << " " << p.second << endl; que.pop(); //如果取出的狀態已經是終點,則結束搜尋 if(p.first == gx && p.second == gy) break; //四個方向的迴圈 for(int i = 0; i < 4; ++i) { //移動之後的位置記為(nx,ny) int nx = p.first + dx[i],ny = p.second + dy[i]; //判斷是否可以移動以及是否已經訪問過(d[nx][ny] != INF即為已經訪問過) if(0 <= nx && nx < n && 0 <= ny && ny < m && maze[nx][ny] != '#' && d[nx][ny] == INF) { //可以移動的話則加入佇列,並且到該位置的距離確定為到p的距離+1 que.push(P(nx,ny)); d[nx][ny] = d[p.first][p.second] + 1; } } } return d[gx][gy]; } void solve() { int res = bfs(); printf("%d\n",res); } int main() { #ifndef ONLINE_JUDGE freopen("in.txt","r",stdin); // freopen("out.txt","w",stdout); #endif // ONLINE_JUDGE while(cin >> n >> m) { memset(maze,0,sizeof(maze)); for(int i = 0; i < n; ++i) for(int j = 0; j < m; ++j) { cin >> maze[i][j]; if(maze[i][j] == 'S') {sx = i; sy = j;} if(maze[i][j] == 'G') {gx = i; gy = j;} } // cout << sx << " " << sy << endl; // for(int i = 0; i < n; ++i) // { // for(int j = 0; j < n; ++j) // cout << maze[i][j]; // cout << endl; // } solve(); } return 0; }
struct的使用:
//有n個結構體變數,內含學生號, 姓名和三門課成績。要求輸出平均成績最高學生的資訊。
#include <stdio.h>
#define N 3
struct Student
{
int num;
char name[20];
float socre[3];
float aver;
};
void input(struct Student stu[])
{
int i;
printf("請輸入各學生的資訊:學號,姓名,三門課成績:\n");
for(i=0;i<N;i++)
{
scanf("%d %s %f %f %f",&stu[i].num,stu[i].name,&stu[i].socre[0],&stu[i].socre[1],&stu[i].socre[2]);
stu[i].aver=(stu[i].socre[0]+stu[i].socre[1]+stu[i].socre[2])/3;
}
}
struct Student max(struct Student stu[])
{
int i,m=0;
for(i=0;i<N;i++)
if(stu[i].aver>stu[m].aver)
m=i;
return stu[m];
}
void print(struct Student stud)
{
printf("\n成績最高的學生是\n");
printf("學號:%d\n姓名:%s\n三門課成績:%5.1f,%5.1f,%5.1f\n平均成績:%6.2f\n",stud.num,stud.name,stud.socre[0],stud.socre[1],stud.socre[2],stud.aver);
}
int main()
{
struct Student stu[N],*p=stu;
input(p);
print(max(p));
return 0;
}
相關推薦
函式多個返回值與unpack的用法
-- return the index of max number and himself -- 函式可以返回多個值 function get_max( T ) local index = 1 local max = T[1] for i, v i
PYTHON自動化Day6-函式多個返回值和匿名函式、列表生成式,三元運算子,os模組,sys模組,時間模組,字典排序,資料庫操作,加密(md5)
一.函式多個返回值和匿名函式 #函式返回多個值,用一個變數接收 def say(): num1=1 num2=2 num3=3 return num1,num2,num3 res=say() print(res) #打印出來是元組。 函式如果返回多個值的話,會把返回的
每日學點python之九(神奇的函式)----多個返回值及不定長引數
今天學習python的函式,發現它與c/c++有很大的區別,感覺很不可思議。 1.函式返回多個值 In [3]: def divid(a,b): ...: result=a//b ...: remain=a%b ...: return resul
C++中pair的用法以及函式的多個返回值的用法
注意:文章為轉載多人的部落格,我只是綜合一下。pair的型別: pair 是 一種模版型別。每個pair 可以儲存兩個值。這兩種值無限制。也可以將自己寫的struct的物件放進去。。 pair<string,int> p; pair<int
C# 委託/Func() 中 GetInvocationList() 方法的使用 | 接收委託多個返回值
在日常使用委託時,有以下常用方法 方法名稱 說明 Clone 建立委託的淺表副本。 GetInvocationList 按照呼叫順序返回此多路廣播委託的呼叫列表。
Go中多個返回值的技巧
直接上程式碼看個例子吧: package main import "fmt" //返回 X+Y 和 X*Y func Computer(X, Y int) (int, int) { return X+Y, X*Y } func main() { x := 10 y := 2
ASP.NET 有多個返回值的函式
1. 函式: public (string, string, int, double) FunctionName(string ID) { string a1 = ""; //第1個返回值 &nbs
如何編寫有多個返回值的C語言函式
1引言 筆者從事C語言教學多年,在教學中學生們常常會問到如何編寫具有多個返回值的C語言函式。編寫有多個返回值的函式是所有C語言教材裡均沒有提到的知識點,但在實際教學與應用的過程中我們都有可能會遇到這樣的問題。有學生也嘗試了不少方法:如把多個需要返回的值作相應的處理後變成一個可以用return語
C#中的函數(-) 無參無返回值的函數
bug 變量 做的 main函數 main pan 當前 小例子 放棄 分析下C#中的函數 先寫一個小例子,一個靜態函數,無返回值,無形參 在第17行與20行分別下斷點 F5調試運行,此時中斷在第17行MyFunction(), 在第17行右鍵反匯編,看下反匯編代碼 這
C#中" 並非所有的程式碼路徑都返回值" ---FOR
方法宣告中有返回型別定義,而方法中有一種執行方式沒有返回值. 例如下面的方法,當var為假時方法沒有返回值,就會在編譯時報錯"並非所有的程式碼路徑都返回值" public string GetSome(bool var) {
由Dapper QueryMultiple 返回資料的問題得出==》Dapper QueryMultiple並不會幫我們識別多個返回值的順序
今天幫群友整理Dapper基礎教程的時候手腳快了點,然後遇到了一個小問題,Dapper QueryMultiple 返回資料的問題 多個返回值用QueryMultiple ,這個大家都知道,如果不清楚的看下下面的文件: 這個是官方文件: Multiple Results Dapper allows
spring多執行緒返回值 並對多個返回值進行操作
最近遇到一個問題:有一大堆的債券,需要根據不同類別的標籤進行篩選出需要的債券,並且還要根據條件對這些標籤分別進行並和或操作。 最終決定使用callable+future來實現: 具體程式碼如下: @RequestMapping("/test") public Object
詳解C++中的純虛擬函式(虛擬函式區別)&多型性 以及理解
#include <iostream> #include <cstdio> using namespace std; class A { public: void foo() { printf("1\n");
函式中有多個return?C語言中,一個函式可以有幾個返回值?
在移植wifi的程式碼時,遇到了一些與下面類似的函式,這些函式中有不只一個return,這可是個新鮮的玩意兒: int func (int b) { int a=5; if (a>b) return a; else
Struts2中一個action調用多個方法以及動態方法的調用
man style dmi itl public 頁面 Coding gpo 調用 一個action調用多個方法:通過實現ActionSupport action方法 public class FirstAction extends ActionSupport {
Excel 2010 Vlookup函數用法(合並多個組員反饋回來的表格 到 一張表中)
index font 用戶 組合鍵 -s line 標定 AC 雙擊 VLOOKUP函數用法說明: 案例 情景:組長有一張表格,發給多個組員填寫,每個組員填寫完之後反饋回來,然後組長將多個組員反饋回來的表格合並到一張表格,如何快速實現? 總表.xlsx:是
C++中抽象類以及虛/純虛、解構函式的區別與介紹
一、虛擬函式 在某基類中宣告為 virtual 並在一個或多個派生類中被重新定義的成員函式,用法格式為:virtual+函式返回型別+ 函式名(引數表) {函式體};實現多型性,通過指向派生類的基類指標或引用,訪問派生類中同名覆蓋成員函式。 二、純虛擬函式 純虛擬函式是一種
C++中virtual(虛擬函式)的用法詳解
在面向物件的C++語言中,虛擬函式(virtual function)是一個非常重要的概念。因為它充分體現了面向物件思想中的繼承和多型性這兩大特性,在C++語言裡應用極廣。比如在微軟的MFC類庫中,你會發現很多函式都有virtual關鍵字,也就是說,它們都是虛擬函式。難怪有人甚至稱虛擬函
c++中的string常用函式用法總結
標準c++中string類函式介紹注意不是CString之所以拋棄char*的字串而選用C++標準程式庫中的string類,是因為他和前者比較起來,不必 擔心記憶體是否足夠、字串長度等等,而且作為一個類出現,他整合的操作函式足以完成我們大多數情況下(甚至是100%)的需要。
c++中的string常用函式用法總結!
標準c++中string類函式介紹注意不是CString之所以拋棄char*的字串而選用C++標準程式庫中的string類,是因為他和前者比較起來,不必 擔心記憶體是否足夠、字串長度等等,而且作為一個類出現,他整合的操作函式足以完成我們大多數情況下(甚至是100%)的