C++ STL之Vector

向量 vector 是一種對象實體, 能夠容納許多其他類型相同的元素, 因此又被稱為容器。
vector 屬于STL(Standard Template Library, 標準模板庫)中的一種自定義的數據類型, 可以廣義上認為是數組的增強版。
vector是C++用于數組類的容器,它可以被近似的認為是一個自動增長的動態數組

1.基本操作

1)頭文件 #include<vector>

2) 創建和初始化

vector<int> a ;                                //聲明一個int型向量a
vector<int> a(10) ;                            //聲明一個初始大小為10的向量
vector<int> a(10, 1) ;                         //聲明一個初始大小為10且初始值都為1的向量
vector<int> b(a) ;                             //聲明并用向量a初始化向量b
vector<int> b(a.begin(), a.begin()+3) ;        //將a向量中從第0個到第2個(共3個)作為向量b的初始值

還可以用數組直接初始化向量

int n[] = {1, 2, 3, 4, 5} ;
vector<int> a(n, n+5) ;              //將數組n的前5個元素作為向量a的初值
vector<int> a(&n[1], &n[4]) ;        //將n[1] - n[4]范圍內的元素作為向量a的初值

3) 插入元素

尾部插入:

v.push_back(5); //將數字5插入到v的尾部

?對于定長的數組 可以使用下標輸入元素

vector<int> v[11];
for(int i = 0; i < 10; i++){v[i] = i;
}

用insert插入元素:

v.insert(v.begin()+i,a) //在第i+1個元素前面插入a
v.insert(v.begin(), 3, 1000) ;        //將1000分別插入到向量元素位置的0-2處(共3個元素)
vector<int> a(5, 1) ;
vector<int> b(10) ;
b.insert(b.begin(), a.begin(), a.end()) ;        //將a.begin(), a.end()之間的全部元素插入到b.begin()前

4)訪問元素

可以直接用下標訪問:

for(int i = 0; i < 10; i++){v[i] = i;
}

使用迭代器訪問元素

for(it = v.begin(); it != end(); it++){cout << *it << endl;
}

5)刪除元素:

v.erase(v.begin()+2) //刪除第三個元素
v.erase(v.begin()+i,v.end()+j) //刪除區間[i,j-1],從區間0開始計算

6)數組大小(數組存儲的個數)?

v.size()

7) 清空整個數組?

v.clear();

8)交換 swap?

v1.swap(v2);

9) 復制

vector<int> v1;
v1.push_back(5);
v2 = v1;

10)比較 保持 ==、!=、>、>=、<、<= 的慣有含義 ;

? ? ? 如: a == b ; //a向量與b向量比較, 相等則返回1

2.vector 元素類型

1)可以是基礎元素類型,int,double,float,還可以是自定義的結構體

#include<iostream>
#include<vector>
using namespace std;struct Student{char name[50];int age;
};int main(){vector<Student> v;Student stu;stu.name = "wangtianshui";stu.age = 25;v.push_back(stu);vector<int>:: iterator it = begin();cout << (*it).name << (it*).age << endl;
return 0;
}

2)二維數組

vector<int,vector<int> > v; 

3)還可以可以是string類型,以及和string組成二位字符串數組(在某些PAT習題中有體現)

4)結構體里的字符串也可以是string定義的。

3.算法?

算法的頭文件是#include<algorithm>

1) 配合sort進行排序

sort(v.begin(),v.end()); //sort默認從小到大

可以重定義比較函數

bool cmp(const int a, const int b){return a>b;
}
sort(v.begin(),v.end(),cmp);//調用后數組中元素就是從大到小排序了

2)reverse()

reverse(v.begin(),v.end());//此后的數組元素就被翻轉過來了

3)結構體重載比較?

 struct Student{int score;int age;//按照分數降序,年齡升序排列bool operator<(const Student &a) const{if(score != a.score) return score > a.score;else return age < a.age;}
}stu;
int main(){vector<Student> stu;for(int i  = 0; i < n; i++){cin >> stu[i]].score >> stu[i].age;
}
vector<Student>:: iterator t;
for(t = stu.begin(); it != stu.end(); it++){cout <<(*t).score << (*t).age << endl;
}

------------------------------------------------------------------------------------

?先整理這些,以后遇到不同的用法再補充

轉載于:https://www.cnblogs.com/wanghao-boke/p/10471426.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/385103.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/385103.shtml
英文地址,請注明出處:http://en.pswp.cn/news/385103.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

字符流中第一個不重復的字符

題目描述 請實現一個函數用來找出字符流中第一個只出現一次的字符。例如&#xff0c;當從字符流中只讀出前兩個字符"go"時&#xff0c;第一個只出現一次的字符是"g"。當從該字符流中讀出前六個字符“google"時&#xff0c;第一個只出現一次的字符是&q…

C++ STL之Set

set是關聯容器&#xff0c;類似于集合。 特點是里面的元素不會重復&#xff0c;而且元素時有序的。 1.聲明定義&#xff1a; #include<set>using namespace std;set<int> s; 2.常見用法 s.inert(5); //插入 s.begin(); //返回s的第一個元素 s.end(); // 返回最后一…

表示數值的字符串

題目描述 請實現一個函數用來判斷字符串是否表示數值&#xff08;包括整數和小數&#xff09;。例如&#xff0c;字符串"100","5e2","-123","3.1416"和"-1E-16"都表示數值。 但是"12e","1a3.14","…

數據庫簡單實用(一)

一、實驗環境&#xff1a; MySQL 2.7.22 xfce終端 二、開發準備 打開MySQL服務并使用root登錄 sudo service mysql start //打開mysql服務 mysql -u root //使用root用戶登錄&#xff0c;密碼為空 -u和root之間可以不用空格 三、實驗步驟 //如果在操作中忘掉&#xff1b;可以使…

lambda 表達式定制操作

泛型算法中的定制操作 許多算法都會比較輸入序列中的元素以達到排序的效果&#xff0c;通過定制比較操作&#xff0c;可以控制算法按照編程者的意圖工作。 普通排序算法&#xff1a;template<class RandomIterator> void sort(RandomIterator first,RandomIterator last)…

包含min函數的棧

題目描述 定義棧的數據結構&#xff0c;請在該類型中實現一個能夠得到棧中所含最小元素的min函數&#xff08;時間復雜度應為O&#xff08;1&#xff09;&#xff09;。 解法&#xff1a; class Solution { public:stack<int> s;stack<int> s_min;void push(int v…

01-復雜度3 二分查找 (20 分)

本題要求實現二分查找算法。 函數接口定義&#xff1a; Position BinarySearch( List L, ElementType X );其中List結構定義如下&#xff1a; typedef int Position; typedef struct LNode *List; struct LNode {ElementType Data[MAXSIZE];Position Last; /* 保存線性表中最后…

二叉樹的鏡像

題目描述 操作給定的二叉樹&#xff0c;將其變換為源二叉樹的鏡像。 輸入描述: 二叉樹的鏡像定義&#xff1a;源二叉樹 8/ \6 10/ \ / \5 7 9 11鏡像二叉樹8/ \10 6/ \ / \11 9 7 5 解法&#xff1a; /* struct TreeNode {int val;struct TreeNode *left;struct Tre…

01-復雜度1 最大子列和問題 (20 分)

給定K個整數組成的序列{ N?1??, N?2??, ..., N?K?? }&#xff0c;“連續子列”被定義為{ N?i??, N?i1??, ..., N?j?? }&#xff0c;其中 1≤i≤j≤K。“最大子列和”則被定義為所有連續子列元素的和中最大者。例如給定序列{ -2, 11, -4, 13, -5, -2 }&#x…

300. 最長上升子序列

給定一個無序的整數數組&#xff0c;找到其中最長上升子序列的長度。 示例: 輸入: [10,9,2,5,3,7,101,18] 輸出: 4 解釋: 最長的上升子序列是 [2,3,7,101]&#xff0c;它的長度是 4。 說明: 可能會有多種最長上升子序列的組合&#xff0c;你只需要輸出對應的長度即可。 你算法…

02-線性結構1 兩個有序鏈表序列的合并 (15 分)

本題要求實現一個函數&#xff0c;將兩個鏈表表示的遞增整數序列合并為一個非遞減的整數序列。 函數接口定義&#xff1a; List Merge( List L1, List L2 );其中List結構定義如下&#xff1a; typedef struct Node *PtrToNode; struct Node {ElementType Data; /* 存儲結點數據…

50. Pow(x, n)

實現 pow(x, n) &#xff0c;即計算 x 的 n 次冪函數。 示例 1: 輸入: 2.00000, 10 輸出: 1024.00000 示例 2: 輸入: 2.10000, 3 輸出: 9.26100 示例 3: 輸入: 2.00000, -2 輸出: 0.25000 解釋: 2-2 1/22 1/4 0.25 說明: -100.0 < x < 100.0 n 是 32 位有符號整數&…

01-復雜度2 Maximum Subsequence Sum (25 分)

Given a sequence of K integers { N?1??, N?2??, ..., N?K?? }. A continuous subsequence is defined to be { N?i??, N?i1??, ..., N?j?? } where 1. The Maximum Subsequence is the continuous subsequence which has the largest sum of its elements.…

進制轉換習題

題目&#xff1a;進制轉換 解法&#xff1a; #include <iostream> #include <vector> #include <algorithm> using namespace std; long long nums, k;void solution(long long nums, long long k) {vector<int> res;while(nums){long long curr nu…

02-線性結構2 一元多項式的乘法與加法運算 (20 分)

設計函數分別求兩個一元多項式的乘積與和。 輸入格式: 輸入分2行&#xff0c;每行分別先給出多項式非零項的個數&#xff0c;再以指數遞降方式輸入一個多項式非零項系數和指數&#xff08;絕對值均為不超過1000的整數&#xff09;。數字間以空格分隔。 輸出格式: 輸出分2行&…

《Leetcode | 02》

序號題目類型標記 863. 二叉樹中所有距離為 K 的結點 ★ 94. 二叉樹的中序遍歷 ★ 102. 二叉樹的層次遍歷 144. 二叉樹的前序遍歷 450. 刪除二叉搜索樹中的節點 701. 二叉搜索樹中的插入操作 700. 二叉搜索樹中的搜索 108. 將有序數組轉換為二叉搜索樹 701. …

C++基礎:各種輸入方法總結

輸入原理簡述&#xff1a; 程序的輸入都建有一個緩沖區&#xff0c;即輸入緩沖區。每次輸入過程是這樣的&#xff0c;當一次鍵盤輸入結束時會將輸入的數據存入輸入緩沖區&#xff0c;而cin函數直接從輸入緩沖區中取數據。正因為cin函數是直接從緩沖區取數據的&#xff0c;所以…

04-樹7 二叉搜索樹的操作集 (30 分)

本題要求實現給定二叉搜索樹的5種常用操作。 函數接口定義&#xff1a; BinTree Insert( BinTree BST, ElementType X ); BinTree Delete( BinTree BST, ElementType X ); Position Find( BinTree BST, ElementType X ); Position FindMin( BinTree BST ); Position FindMax( B…

02-線性結構3 Reversing Linked List (25 分)

Given a constant K and a singly linked list L, you are supposed to reverse the links of every K elements on L. For example, given L being 1→2→3→4→5→6, if K3, then you must output 3→2→1→6→5→4; if K4, you must output 4→3→2→1→5→6. Input Specifi…

03-樹1 樹的同構 (25 分)

給定兩棵樹T1和T2。如果T1可以通過若干次左右孩子互換就變成T2&#xff0c;則我們稱兩棵樹是“同構”的。例如圖1給出的兩棵樹就是同構的&#xff0c;因為我們把其中一棵樹的結點A、B、G的左右孩子互換后&#xff0c;就得到另外一棵樹。而圖2就不是同構的。 圖1 圖2 現給定兩棵…