1. 程式人生 > >C++學習(0)之vector

C++學習(0)之vector

C++小白在學習leetcode時遇到的問題

vector是什麼?

vector是一種包含相同資料型別的物件的一種容器(或集合,是一種標準庫)。vector物件能高效增長。

1、vector建立

vector<資料型別> v1(v1為物件名稱)。

例如:vector<int> v1;

 vector<string> V1;

 vector<Rect> V1;//假設Rect是一種定義的結構體。

2、vector相關函式

可以在vector建立時對其初始化,也可以在執行時向其新增元素。

1)初始化vector

vector<int> v1(10,1);//表示該容器裡有10個整型元素,每個元素被賦值為1;

vector<int> v1{1,2,2};//表示該容器裡有3個整型元素,元素分別為1,2,2;

vector<string>v2(5,“abcdef”);//表示該容器裡有5個string元素,每個元素被賦值為“abcdef”;

vector<string>v2{“abcdef”,“abcdef”};//表示該容器裡有2個string元素,每個元素被賦值為“abcdef”;

2)向vector其中新增元素,尾部新增。

比如建立了vector<int>v;

v.push_back(a);//向vector中添加了元素a;

v.begin();//第一個元素

v.end();//最後一個元素的下一個位置

3)判斷vector是否為空

v.empty();//如果v不含有任何元素,返回真;否則返回假。

4)vector大小

v.size();//返回v中元素的個數。

5)返回vector中元素的引用

v[n] ;//返回v中第n個位置上元素的引用

6)替換

v=v1;//用v1中元素的拷貝替換v中的元素;

v={a,b,c,.....};//用列表中的元素的拷貝替換v中的元素;

7)判斷兩個vector相等

v==v1;//只有當v和v1中所有的元素對應相等時,v和v1才相等。

8)比較

>、>=、<、<=;//按照字典順序進行相應位置上的元素比較。

9)在vector中插入元素

v.insert(v.begin()+i,a);在第i+1個元素前面插入a


10)刪除元素

v.erase(v.begin()+n);刪除第n個元素

11)清空vector

v.clear()

12)排序

sort(vec.begin(),vec.end());//(預設是按升序排列,即從小到大).

相關題目(leetcode-cpp):

2.1.1 Remove Duplicates from Sorted ArrayGiven a sorted array, remove the duplicates in place such that each element appear only onceand return the new length.Do not allocate extra space for another array, you must do this in place with constant memory.
For example, Given input array
A = [1,1,2],Your function should return length = 2, and A is now[1,2].

程式碼一、

// LeetCode, Remove Duplicates from Sorted Array

class Solution {
public:
int removeDuplicates(vector<int>& nums) {
if (nums.empty()) return 0;
int index = 0;
for (int i = 1; i < nums.size(); i++) {
if (nums[index] != nums[i])
nums[++index] = nums[i];
}
return index + 1;
}
}; 

實現:

#include<iostream>
#include<vector>
using namespace  std;

class Solution{
public:
	int removeDuplicates(vector<int>& nums){
	if(nums.empty()) 
		return 0;
	int index = 0;
	for(int i = 1;i < nums.size();i++){
		if(nums[index] != nums[i])
			nums[++index] = nums[i];
			}
			return index + 1;
	}
};
int main(){
	Solution solution;
	int a[8] = {1,2,3,3,4,5,6,6};
	vector<int> va(a,a+8);
	for(int i = 0;i < va.size();i++)
		cout<<a[i]<<" ";
	cout<<endl;
	for(vector<int>::iterator it = va.begin();it != va.end();++it)
		cout<<*it<<" ";
	cout<<endl;
	int b = solution.removeDuplicates(va);
	for(vector<int>::iterator it = va.begin();it != va.end();++it)
		cout<<*it<<" ";
	cout<<endl;
	cout<<b;
	return 0;
	
}
執行後:
1 2 3 3 4 5 6 6 
1 2 3 3 4 5 6 6 
1 2 3 4 5 6 6 6 
6
實際上,上述程式碼並沒有實現題目所要求的功能。

修改如下:

#include<iostream>
#include<vector>
using namespace  std;

class Solution{
public:
	int removeDuplicates(vector<int>& nums){
	if(nums.empty()) 
		return 0;
	int index = 0;
	for(int i = 1;i < nums.size();i++){
		if(nums[index] != nums[i])
			nums[++index] = nums[i];
		else 
				{
					nums.erase(nums.begin()+index);
					--i;
				}
			}
			return index + 1;
	}
};
int main(){
	Solution solution;
	int a[8] = {1,2,3,3,4,5,6,6};
	vector<int> va(a,a+8);
	for(int i = 0;i < va.size();i++)
		cout<<a[i]<<" ";
	cout<<endl;
	for(vector<int>::iterator it = va.begin();it != va.end();++it)
		cout<<*it<<" ";
	cout<<endl;
	int b = solution.removeDuplicates(va);
	for(vector<int>::iterator it = va.begin();it != va.end();++it)
		cout<<*it<<" ";
	cout<<endl;
	cout<<b<<endl;
	return 0;
	
}
執行後:
1 2 3 3 4 5 6 6 
1 2 3 3 4 5 6 6 
1 2 3 4 5 6 
6


程式碼二、
// LeetCode, Remove Duplicates from Sorted Array

class Solution {
public:
int removeDuplicates(vector<int>& nums) {
return distance(nums.begin(), unique(nums.begin(), nums.end()));
}
};

程式碼三、
//LeetCode, Remove Duplicates from Sorted Array

class Solution {
public:
int removeDuplicates(vector<int>& nums) {
return distance(nums.begin(), removeDuplicates(nums.begin(), nums.end(), nums.beg
}
template<typename InIt, typename OutIt>
OutIt removeDuplicates(InIt first, InIt last, OutIt output) {
while (first != last) {
*output++ = *first;
first = upper_bound(first, last, *first);
}
return output;
}
}; 

相關推薦

C++學習0vector

C++小白在學習leetcode時遇到的問題 vector是什麼? vector是一種包含相同資料型別的物件的一種容器(或集合,是一種標準庫)。vector物件能高效增長。 1、vector建立 vector<資料型別> v1(v1為物件名稱)。 例如:vect

C++學習Visual Studio寫system語句 生成可執行文件

屬性 默認 右鍵 同學 文件夾 開發 源代碼 學習 http system命令 1、首先先介紹一些system命令 windows+tab //切換窗口 windows+R //調出命令窗口 命令: 輸入 calc 打開計算機 輸入 cmd 打開命令窗口 輸入 msp

C++學習 基本數據類型

大成 double mini png 滿足 const case bit 普通 基本數據類型 上期回顧 stdlib.h system,命令release MT導入ico文件 基本數據類型 整數 int浮點型(小數 實型) float double字符型 ch

C++學習 輸出

分享 2.3 span pri hello 2.4 小數位 bubuko 整型 輸出學習時的筆記(其實也沒什麽用,留著給自己看的) printf 用於輸出內容 控制臺黑窗口printf("要輸出的內容"); //可以是任意內容-->如果要輸出變量 1、格式占

C++學習 項目 推箱子遊戲

bgm 控制臺 兩個 分享 加載圖片 eat gethwnd put init 遊戲制作 推箱子 步驟分析 1、模板 2、模板分析 組成元素: 空地 墻 人 目的地 箱子 背景 3、如何操作 通過WASD鍵盤操作人,推著箱子,到達目

python的學習筆記0循環的使用1

循環條件 back 技術分享 -s 這就是 相同 直接 用法 深入   這是我第一次正式的開始學習這門語言,雖然之前也多多少少接觸過一點,但是一直沒有深入的學習和研究過,所以我打算從今天起準備開始由淺入深的學習下這門語言。   python這門語言和其他語言相比最大的特點就

C/C++學習迴圈雙鏈表的操作建立,插入、刪除

雙向連結串列 迴圈單鏈表的出現,雖然能夠實現從任一結點出發沿著鏈能找到其前驅結點,但時間耗費是O(n)。如果希望從表中快速確定某一個結點的前驅,另一個解決方法就是在單鏈表的每個結點裡再增加一個指向其

PYTHON學習利用python進行數據分析(1)---準備工作

-- 下載 rip 安裝包 png 要求 eight code 電腦   學習一門語言就是不斷實踐,python是目前用於數據分析最流行的語言,我最近買了本書《利用python進行數據分析》(Wes McKinney著),還去圖書館借了本《Python數據分析基礎教程--N

C++學習入門篇——函數

image clu square src 函數接口 值類型 使用 mes 技術分享 C++函數分兩種:有返回值的和沒返回值的 1.有返回值的函數 調用函數流程 如圖,sqrt(6.25)為函數調用,

C++學習入門篇——String類

允許 res fort ngs 結果 初始化 ant content app 可以用string類而不是字符數組來存儲字符串,string更加簡單 要是用string類,則要在程序中包含頭文件string,且位於std名稱空間中,string類隱藏了字符串的數組性質,可以像

C++學習1:最大子段和多種解法

多少 問題: code namespace 數據 組成 amp using () 問題:給定由n個數(可能為負數)組成的序列a1,a2,a3,...,an,求該序列子段和的最大值。 第一種解法:(最容易考慮的方法,將所有的子段一一相加,然後比較) 1 #include&

Linux文件系統學習相關概念???

正是 range 不同的 struct pan 根據 inode 存在 opera “一切皆是文件”是 Unix/Linux 的基本哲學之一。不僅普通的文件,目錄、字符設備、塊設備、套接字等在 Unix/Linux 中都是以文件被對待;它們雖然類型不同,但是對其提供的卻是同

Linux文件系統學習重要數據結構1

class targe html evel 系統結構 會有 集合 spec lan 轉載自:https://blog.csdn.net/wudongxu/article/details/6436894 《Linux內核設計與實現》 http://www.ibm.com/

NS3入門學習指令碼執行例項

 ns3中使用的編譯系統是waf,所有的c++工程都需要經過waf編譯後執行,除錯時也需要waf的。 在3.1.3中還是使用C++寫指令碼,在/ns-3.1.3/examples/tutorial/的second.cc指令碼中可以看出來,在3.2.6以上版本中已經增加了python

NS2入門學習分裂物件模型和TclCL

 TclCL其實就是連線C++與Otcl,實現兩者的互相操作和兩者之間類的對應. NS中使用兩種語言原因: C++執行速度較快,是強制型別語言(進行嚴格的資料型別檢查),容易實現複雜的資料型別和精確/複雜的演算法。但是修改/debug和重新編譯時間較長,所以適合完成網路協

NS2入門學習Otcl知識點

面向物件的Tcl語言,物件和類的概念同C++類似。 1.類和物件的定義 % Class  Animal #定義類名 % Animal animal_1#產生類的物件 animal info class =>Animal

NS2入門學習Tcl知識點

1、基本命令格式換(如下總結一些易錯的知識點) “#”:註釋 ";"或者"換行"作為語句的結束 2、變數 變數不需要事先宣告; 在使用變數時要在變數名前加$,如$var; set  var 3,set命令用來給變數賦值;   unset var,u

hyperledger fabric 學習-hyperledger fabric 的與眾不同

一、作為linux基金會下的一個開源專案,有linux基金會作背書,顯然發展不會差,第一波加入的公司和組織就非常的高大上,更加說明這個專案的牛逼性(一個人說你厲害,不見得你厲害,一百個人說你厲害,你自然就很厲害了) 二、模組化以及可配置的架構      fa

hyperledger fabric 學習-hyperledger fabric 的模組化

A pluggable ordering service establishes consensus on the order of transactions and then broadcasts blocks to peers. 主要分為以下幾個模組: 排序服務

CSS基礎學習 line-height && height 屬性區別

  官方定義: height:定義了了元素的高度。預設情況下,該屬性訂了 content area(內容區域) 的高度。如果box-sizing屬性設定為 border-box,那麼height就表示border-area的高度。 line-height:用來設定多行元素的空間量,比如文字。對