1. 程式人生 > >運算子過載,迭代器

運算子過載,迭代器

【1】
bool operator > (const Book &p) const {     return p.isbn < isbn; }
是對運算子 > 的過載 ,const Book &p 是 對類Book 的引用 &p,p.isbn < isbn  是對類中成員 isbn比較大小,並返回bool 型的值。

【2】
在STL中,如果要將自定義的型別放入到set中的話,就需要過載“<”符號。原因是set是一個有序的集合,集合會按照“<”比較的大小,預設按照從小到大的順序排列。
假設現在設計如下型別:
這時,為了讓MyType型別可以順利地放進set中,我們必須過載“<”,那麼問題來了,要如何過載呢?
class MyType
{
public:
  int a, b, c;
}
這個型別有三個資料成員,不妨要求先按a值從小到大排列,如果a值相等,就按照b和c的大小排列。
bool operator<(const MyType& myType) const
{
  return a<myType.a?true:(b<myType.b?true:c<myType.c);
}

這樣一來,set就可以正常工作了。當有MyType(1,2,3)、MyType(1,2,4)兩個元素時,執行結果如下:
<1,2,3> <1,2,4>
【3】
C++語法解釋:
map<int, string>::iterator iter 是宣告一個 迭代器。iterator類是在map<int, string>類中定義的,所以如果要使用它,需要使用作用域解析操作符::。“迭代器相當於指標! 不過更安全些。每種容器都定義了迭代器,迭代器在STL中相當重要,它將容器和演算法連結起來 ,用容器的時候迭代器是十分必須的。
map<int, string> iter 是 宣告一個map容器。
【4】
 運算子過載格式:
<返回型別說明符> operator <運算子符號>(<引數表>)
  {
  <函式體>
  }

【5】
表有兩列,要求:

1.第二列從大到小排列

2.若第二列相等,第一列從小到大排序

C++運算子過載 實現

struct Job{
 8     int x,y;
 9     bool operator < (const Job &j) const { //operator
10         if(y==j.y){
11             return x < j.x;
12         }
13         return y > j.y;
14     }
15 };
vector<Job> v;
24         for(int i=0;i<n;i++){
25             scanf("%d%d",&x,&y);
26             v.push_back(Job{x,y}); //vector的末尾插入一個元素
27         }




解C++語法map<int, string>::iterator iter

解釋C++語法map<int, string>::iterator iter

解釋C++語法map<int, string>::iterator iter

相關推薦

運算子過載

【1】 bool operator > (const Book &p) const { return p.isbn < isbn; } 是對運算子 > 的過載 ,const Book &p 是 對類Book 的引用 &p,p

用程式碼來解釋可生成器的區別

一. 創造器(creator) 這是我自己造的一個名詞,因為在python術語中,對只實現了__next__()方法的物件,好像沒有任何名分,為了說明,我將只實現了__next__()方法的物件稱為創造器(creator)。 class O_Next: def __init__(se

day011 函式名的運用閉包

主要內容: 1.函式名的使用以及第一類物件 2.閉包 3.迭代器一、函式名的運用 函式名就是變數名,命名規則與變數名一樣。 函式名儲存的是函式的記憶體地址。 1、檢視函式名的記憶體地址 """python def inf(): print("疏影"

Python生成器,可物件

              在瞭解Python的資料結構時,容器(container)、可迭代物件(iterable)、迭代器(iterator)、生成器(generator)、列表/集合/字典推導式(list,set,dic

python3.5進階(三)-------------實現多工之協程(生成器

1.迭代器:迭代是訪問集合元素的一種方式,迭代器是可以記住遍歷的位置的物件,迭代器物件從集合的第一個元素開始訪問,直到所有訪問結束,迭代器只能前進不能後退。判斷一個數據型別是否可以迭代,看是否能for迴圈。如(字串,列表,元祖...)序列可以迭代,數字不能迭代,或通過isintance([11,12

vector容器空間介面卡三個類方法的實現

C++的STL庫有一個容器叫vector,這個容器底層的資料結構是一個記憶體可以自動增長的陣列,每次當陣列儲存滿了以後,記憶體可以自動增加兩倍,請完成vector容器、迭代器和空間配置器三個類方法的實現。 #include<iostream> using namespace

空間配置容器介面卡

一、空間配置器 下面先總體介紹一下空間配置器。空間配置器的作用是在底層為上層的各種容器提供儲存空間,需要多少分配多少,一般分配的比你需要的更多。打個不恰當的比喻,空間配置器和容器之間的關係,相當於將軍和糧草的關係。當然了,容器相當於將軍,它在陣前殺敵,衝鋒陷陣,處理各種事情;而空間配置器

生成器和裝飾

1.生成器 解析器在實時生成資料,資料不會駐留在記憶體中。因此,其執行效率很高! yield 是一個類似 return 的關鍵字,只是這個函式返回的是個生成器 當你呼叫這個函式的時候,函式內部的程式碼並不立即執行 ,這個函式只是返回一個生成器物件 當你使用for進行迭代的時候,函式中的程

Python基礎學習四:for迴圈函式

12、for迴圈 """ for 變數 in 序列 執行的程式碼塊 """ list01 = ['joe', 'susan', 'jack' ,'Tom'] # 遍歷列表 for i in list01: print(i) pass空操作,無任何意義, pas

三元表示式 生成器二分法

三元表示式# x if x > y else y ##如果x大於y,值返回左邊,不然則返回右邊 #用一行程式碼表達一個函式需要做的事情,使程式碼更簡潔 # 例1,# res='x' if True else 'y'# print(res)迭代器 # 1. 什麼是迭代器# 什麼是迭代?# 迭代是一個重複

Python基礎(8):python中的特性進階篇(列表生成式生成器

python中還包括一些高階特性,以下簡單介紹。 迭代 定義:用for迴圈來遍歷物件的過程,叫做迭代。 作用物件:可迭代物件 如何判斷是否為可迭代物件:isinstance(xxx,Iterable),Iterable型別來源於collections模組。 應用場景: 1

對於容器的理解

優化下面的程式碼: class BigObject { private: char m_manyData[100000]; }; static void quizFour() { std::map<int, BigObject> group; //假設在gro

python-第一類物件閉包

# def fn(): # print("我叫fn") # fn() # print(fn) # <function fn at 0x0000000001D12E18> # fn() # gn = fn # 函式名可以進行賦值 # print(gn) # gn() # fn =

C++容器容器的介面卡

容器 順序容器 主要靠下標和迭代器進行操作。順序性的主要靠下標,鏈式的靠迭代器訪問。 包含了順序型的容器和鏈式的容器。 連續型的包括: vector:向量,可以快速擴充套件和刪除元素,在隊尾的操作有優勢! deque:雙端佇列,可以快速的從隊首和隊尾新增或者刪

(十一)函式名的使用閉包

⼀. 函式名的運用.      函式名是⼀個變數, 但它是⼀個特殊的變數, 與括號配合可以執⾏函式的變數.     1.函式名的記憶體地址 def func(): print("呵呵") print(func) 結果: <funct

javascript基礎--陣列(基礎擴充套件陣列的方方法)

一、陣列的基礎: 增:          頭部增加:arr.unshift(3,4,5)      arr=[3,4,5]   原arr改變 ,一次可以增多個,括號裡可寫增加的內容;如 arr

Python基礎之(裝飾、生成器)

一、裝飾器 1.1、什麼是裝飾器? 裝飾器本質上就是一個python函式,他可以讓其他函式在不需要做任何程式碼變動的前提下,增加額外的功能,裝飾器的返回值也是一個函式物件。 1.2、裝飾器的原則  不修改被裝飾物件的原始碼 不修改被裝飾物件的呼叫方式 1.3、裝飾器的目標

vector在多執行緒下的問題失效造成程式崩潰。

最近在做專案的過程中,遇到STL中vector的多執行緒訪問問題。問題大概是這樣的:有一個全域性的vector,一個寫程序對該vector進行插入操作(push_back()),同時有一個讀程序在監視該vector的內容並對其進行顯示(操作:size(), at(i)),沒有

python - 閉包裝飾生成器

  在瞭解裝飾器之前,我們必須瞭解閉包是什麼?   如果在一個函式中又定義一個函式,那麼又定義的這個函式被稱為內部函式,而原本的函式被稱為外部函式。   而閉包的概念就是在外部函式中定義了一個內部函式,並且在內部函式中呼叫了外部函式的變數,最後外部函式的返回值是內部函式的引用。 閉包例子:

Scala 陣列(Array)列表(List)元組(Tuple)集(Set)對映(Map)(Iterator)

1. 陣列(Array) 陣列是程式設計中經常用到的資料結構,一般包括定長陣列和變長陣列。本教程旨在快速掌握最基礎和常用的知識,因此,只介紹定長陣列。 定長陣列,就是長度不變的陣列,在Scala中使用Array進行宣告,如下: val intValue