c++指標與集合類介紹使用
前沿
c++是一個重要的工具,涉及到效能問題的都會使用到c++,遺憾的是自己對c++相關的東西不太瞭解,希望藉助這波學習能弄通它。
c++指標
首先弄懂兩個符號的意思,&、*。
&
每一個變數都有一個記憶體位置,每一個記憶體位置都定義了可使用連字號(&)運算子訪問的地址,它表示了在記憶體中的一個地址。請看下面的例項,它將輸出定義的變數地址
#include <iostream>
using namespace std;
int main(){
int var1;
char var2[10];
cout << "地址1:" << &var1 << endl;
cout << "地址1:" << &var2 << endl;
}
*
指標是一個變數,其值為另一個變數的地址,即,記憶體位置的直接地址。就像其他變數或常量一樣,您必須在使用指標儲存其他變數地址之前,對其進行宣告。
#include <iostream>
using namespace std;
int main(){
int var1 = 40;
int *p1;
p1 = &var1;
cout << p1 << endl;
cout << *p1 << endl;
}
執行結果為
➜ code ./a.out
0x7ffee586f6ac
40
可以看到,p1是地址,*p1就是值了。我們再看看它複雜的使用方式。
#include <iostream>
using namespace std;
struct info{
int a;
int b;
};
int main(){
int var1 = 40;
info *p1 = new info();
*p1 = {1 ,2};
cout << p1->a << endl;
cout << p1->b << endl;
int *p2;
p2 = &var1;
cout << *p2 << endl;
*p2 = 3;
cout << *p2 << endl;
delete p2;
delete p1;
}
注意使用g++ -std=c++14 test.cpp進行編譯
c++指標傳值
#include <iostream>
using namespace std;
struct info{
int a;
int b;
};
void disp(info *p1) {
cout << p1->a << endl;
cout << p1->b << endl;
}
int main(){
int var1 = 40;
info *p1 = new info();
*p1 = {1,2};
disp(p1);
delete p1;
}
以上程式碼可以正常執行,同時也可以這樣
#include <iostream>
using namespace std;
struct info{
int a;
int b;
};
void disp(info p1) {
cout << p1.a << endl;
cout << p1.b << endl;
}
int main(){
int var1 = 40;
info *p1 = new info();
*p1 = {1,2};
disp(*p1);
delete p1;
}
*p1就是一個value,而p1是一個指標。再看看下面的程式碼
#include <iostream>
using namespace std;
void disp(int *a){
cout << *a << endl;
}
int main(){
int var1 = 40;
disp(&var1);
}
列印了40
#include <iostream>
using namespace std;
void disp(int* a){
cout << a << endl;
}
int main(){
int var1 = 40;
disp(&var1);
}
列印了0x7ffeef2286cc
可以看到使用&,可以獲取到變數的地址,也就是一個指標。
集合類的使用
下面以map為例子
#include <iostream>
#include <map>
using namespace std;
void disp(std::map<std::string, int> m) {
for(auto it=m.begin(); it != m.end(); it++){
cout<<"key: "<<it->first <<" value: "<<it->second<<endl;
}
}
void disp(std::map<char, int> m) {
for(auto it=m.begin(); it != m.end(); it++){
cout<<"key: "<<it->first <<" value: "<<it->second<<endl;
}
}
void del(std::map<std::string, int> m, std::string key) {
std::map<std::string, int>::iterator it = m.find(key);
if(it != m.end()){
m.erase(key);
}
std::cout << m.size() << std::endl;
}
void del(std::map<std::string, int> *m, std::string key) {
std::map<std::string, int>::iterator it = m->find(key);
if(it != m->end()){
m->erase(key);
}
std::cout << m->size() << std::endl;
}
int main(){
std::map<char, int> first;
first['a'] = 1;
first['b'] = 2;
std::cout << first.size() << std::endl;
disp(first);
std::map<std::string, int> second;
second["ab"] = 4;
second["bc"] = 5;
second["ac"] = 5;
std::cout << second.size() << std::endl;
disp(second);
del(second, "ac");
std::cout << second.size() << std::endl;
del(&second, "ac");
std::cout << second.size() << std::endl;
}
返回結果為
2
key: a value: 1
key: b value: 2
3
key: ab value: 4
key: ac value: 5
key: bc value: 5
2
3
2
2
那c++ std裡面有哪些集合類呢
集合類中還有很多方法,需要在實踐中去運用~慢慢來吧
相關推薦
c++指標與集合類介紹使用
前沿 c++是一個重要的工具,涉及到效能問題的都會使用到c++,遺憾的是自己對c++相關的東西不太瞭解,希望藉助這波學習能弄通它。 c++指標 首先弄懂兩個符號的意思,&、*。 & 每一個變數都有一個記憶體位置,每一個
C#集合介面與集合類
C#開發經常用到.NET框架為我們提供的集合介面和集合類,接下來做一個總結,如有差錯,希望各位大神指正。 首先是集合介面,自己畫了一張圖(嘿嘿,有點醜),來說明集合介面的繼承關係。 個人覺得,瞭解集合介面,首先要把握他們的繼承關係。如
{ MySQL基礎數據類型}一 介紹 二 數值類型 三 日期類型 四 字符串類型 五 枚舉類型與集合類型
場景 簡單介紹 post big varchar run cnblogs 磁盤 table 閱讀目錄 一 介紹 二 數值類型 三 日期類型 四 字符串類型 五 枚舉類型與集合類型 一 介紹
MySQL數據類型--------枚舉與集合類型實戰
mysql dba 數據類型 1. 背景 * MySQL數據庫提供針對字符串存儲的兩種特殊數據類型:枚舉類型ENUM和集合類型SET,集合類型數據類型可以給予我們更多提高性能、降低存儲容量和降低程序代碼理解的技巧。2. 枚舉與集合類型所屬空間與最大成員數量類型占用字節最大成員數量ENUM1 or 2
c#中常用集合類和集合接口之集合類系列【轉】
arr 關聯 special rect 替代 不能 一個數 lock resize 常用集合接口系列:http://www.cnblogs.com/fengxiaojiu/p/7997704.html 常用集合類系列:http://www.cnblogs.com/fengx
c指標 與 java引用
c 指標示例: #include <stdio.h> int test(int *p); int main(){ int a = 1; int *p = &a; test(p); printf("a = %d\n", a); r
枚舉類型與集合類型
maria 集合類 table num con mar lec ble sel 枚舉類型與集合類型 字段的值只能在給定範圍中選擇,如單選框,多選框 enum 單選 只能在給定的範圍內選一個值,如性別 sex 男male/女female set 多選 在給定的範圍內可以選擇一
c 指標與連結串列 以及一閃而過的解決方法
來一個c程式碼 # include<stdio.h> void Gai(int *m)//此處的" *m "代表地址 { *m = 5;//此處的"*m"表示獲取指標指向地址指向的值 } int main(void) { int a = 1; Gai(&
C++ 指標與引用
一:指標 1.1:指標詳解 變數的地址的概念: 記憶體是以位元組為單位進行編址的,記憶體中的每個位元組都對應一個地址,通過地址才能找到每個位元組。變數對應記憶體中的一段儲存空間,該段儲存空間佔用一定的位元組數,用這段儲存空間的第一個位元組的地址表示變數的地址。
C#中各種集合類比較
陣列(Array)的不足(即:集合與陣列的區別) 陣列是固定大小的,不能伸縮。雖然System.Array.Resize這個泛型方法可以重置陣列大小,但是該方法是重新建立新設定大小的陣列,用的是舊陣列的元素初始化。隨後以前的陣列就廢棄!而集合卻是可變長的。
c#自定義集合類
在System.Collections 名稱空間下,常用的集合類中,這兩個類不屬於集合,而是作為自定義集合類的基類。 內建的集合並不能滿足所有的資料集合處理,c#為使用者自定義集合提供條件。這兩個基類
C# IPAddress與Ping類使用
獲得輸入的IP地址,並判定是否線上 IPAddress adrIP= IPAddress.Parse(txtIP.Text);//txtIP為窗體中文字框用於輸入IP地址 bool online = false; //是否線上 Ping ping = new Ping(); PingRe
C++指標直接呼叫類成員函式探討
摘要 本文分析了C++程式設計中用指標呼叫“類” 成員函式時出現的問題、原因及後果,討論了一般函式指標和“類”成員函式指標的不同。得出結論: 任何指向“類”的成員函式指標,由於攜帶額外的所屬物件資訊,與一般的函式有根本的不同,不能直接用來進行函式呼叫。此外,本文給出了幾種間接呼叫類的成員函式的方法。作者所
C++指標與字串
C語言裡沒有字串資料型別,要想獲得字串的表示形式利用字元陣列 #include<iostream> using namespace std; #include<stdlib.h&g
第十二節:Scanner類與String類介紹(講師筆記)
12.01_常見物件(Scanner的概述和方法介紹)(掌握) A:Scanner的概述 B:Scanner的構造方法原理 Scanner(InputStream source)System類下有一個靜態的欄位: public static final InputStre
C++ 指標與作用域
C/C++中的指標操作是一個令人抓狂的問題,這幾天在溫習林銳的《高質量C++C程式設計指南》,裡面的記憶體管理這一章對我受益匪淺。看到下面的一段內容,不禁和作者提出相同的疑問:該程式不出錯是因為編譯器的原因嗎?並在網上查詢相關資料。 原始碼1: #include <
C# 建立與引用類庫專案dll
一,類的訪問修飾符 先看下三種類的訪問修飾符情況: public class//公開類,都能訪問該類 internal class//僅能在當前專案訪問類 class//同internal class 所以,要想引用dll中的類,在建立類庫專案時要明確指定
面向物件程式設計(C++) 示例程式——集合類
#include <iostream> #include <string> #include <memory.h> using namespace std; class Set { int maxsize; //集合的當前最大容量 i
C# SortedList(Tkey,TValue)集合類解析與例項
SortedList<TKey,TValue>類表示鍵/值對的集合,這些鍵值對按鍵排序並可按照鍵和索引訪問。 SortedList<TKey,TValue>和 Dictionary<Tkey,TValue>類很類似,都允許將鍵和值關聯。主要區別
C# Stack<T>集合類解析與例項
本文部分註釋部分來源於書籍和官網網摘。 ///Stack<T>佇列後儘先出原則,numbers.Count值大於10的值就是佇列中最後進入的(numbers.Count最大值——10)個元素;