1. 程式人生 > >【C++】順序容器 Vector 注意事項

【C++】順序容器 Vector 注意事項

引用標頭檔案

#include <vector>

一、操作資料

主要有下列幾種方式:

    vector<int> vecSalary;
    //1.直接新增
    vecSalary.push_back(2000);
    vecSalary.push_back(3000);
    //2.按位置新增
    vecSalary.insert(vecSalary.begin(), 1000);
    vecSalary.insert(vecSalary.end(), 4000);
    //刪除vector容器中的前三個元素
    vecSalary.erase(vecSalary.begin(), vecSalary.begin() + 3);
    //清空資料
    vecSalary.clear();

二、使用說明

1)容器中儲存的是指標物件,這需要使用完畢後,釋放這些指標所指向的物件

    vector<Employee*> vecEmployee;
    //操作容器資料
    ...
    //使用完後,釋放指標物件
    for (vector<Employee*>::iterator it = vecEmployee.begin(); it != vecEmployee.end(); ++it)
    {
        if (NULL != *it)
        {
            delete *it;
        }
        *it = NULL;
    }

2)使用迭代器刪除容器中的資料元素需謹慎

vector.erase(pos) :vector刪除位置為pos的值

此時為保持容器記憶體連續性,vector後面的元素會自動向前移動一個位置,迭代器這時候實際指向的是被刪除元素後的第一個元素。

中間跳過了一個元素,這就很可能造成漏掉某些元素的檢查而導致刪除不完全。

正確刪除方式

    for (vector<int>::iterator it  = vecSalary.begin(); it != vecSalary.end();)
    {
        //遇到符合條件的刪除
        if (*it > 1000)
        {
            it = vecSalary.erase(it);
        }
        else
        {
            ++it;
        }
    }

3) vector中的Class 按自己要求排序

#include "stdafx.h"
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
class student
{
public:
    student(int a, string b):nID(a), strName(b)
    {

    }
    int nID;
    string strName;
};
bool OrderByDesc(const student& s1, const student& s2)
{
    return s1.nID < s2.nID;
}
int _tmain(int argc, _TCHAR* argv[])
{
    student s1(2, "s1");
    student s2(1, "s2");
    student s3(4, "s3");
    student s4(3, "s4");
    vector<student> vecStu;
    vecStu.push_back(s1);
    vecStu.push_back(s2);
    vecStu.push_back(s3);
    vecStu.push_back(s4);
    sort(vecStu.begin(), vecStu.end(), OrderByDesc);
    return 0;
}

///////////////////////////////////////

附加 :C++0x中for_each()演算法遍歷
typedef vector<int> VEC_INT;

void printInt(int &it)
{
	if (it % 5 == 0)
	{
	   cout<<it<<" ";
	}	
}

int _tmain(int argc, _TCHAR* argv[])
{
	VEC_INT vecInt;
	int i = 1;
	for (int  i = 1; i < 100; ++i)
	{
	   vecInt.push_back(i);
	}
	for_each(vecInt.begin(),vecInt.end(), printInt);
	return 0;
}


相關推薦

C++順序容器 Vector 注意事項

引用標頭檔案 #include <vector> 一、操作資料 主要有下列幾種方式: vector<int> vecSalary; //1.直接新增 vecSalary.push_back(2000); vecSa

C++向量(vector) 基本使用方法及注意事項

介紹: 向量(Vector)是一個封裝了動態大小陣列的順序容器(Sequence Container)。跟任意其它型別容器一樣,它能夠存放各種型別的物件。可以簡單的認為,向量是一個能夠存放任意型別的動態陣列。 特點: 1.順序序列 順序容器中的元素按照嚴格的線性順序排序。可以通過元素

C++set容器使用

1.定義 set容器可以根據元素的值自動進行排序,不允許元素重複 2.基本操作 操作 函式 宣告 set<型別> s 返回指向第一個元素的

移動端滑屏全應用滑屏封裝注意事項與移動端輪播

移動端滑屏封裝注意事項: 1.touchMove時候方向判斷(可以控制在 以x軸位中心正負15度之內為橫向滑屏,縱向滑屏同理) 2.上下滑屏與左右滑屏的衝突(判斷使用者滑動方向後,只做單方向的處理) 3.安卓觸控(例如某個人手指很粗)觸發touchMove(記錄上一次的手指座標,每一次move的時候判斷

審稿的一些注意事項

一.寫作中需要注意的 1.看論文,查單詞。關於英文:如果對自己寫的某個詞,或句子不是很有信心,那就放到google裡搜一下,很容易找到相似的語句。語法有錯誤的時候一般會寫minus mistakes,但是這真不minus。你想想讓你看一篇全都是he are, is give 的文章,你是

C++佇列容器 標頭檔案 #include 解讀

簡介容器介面卡Code1 簡介 佇列容器 標頭檔案 #include<queue> 解讀 這個標頭檔案定義了兩個跟佇列有關的類----quque、priority_queue,分別實現的是

ACMINT_MAX和INT_MIN注意事項

INT_MIN在標準標頭檔案limits.h中定義。 #define INT_MAX 2147483647 #define INT_MIN (-INT_MAX - 1) 在C/C++語言中,不能夠直接使用-2147483648來代替最小負數,因為這不是一

C++STL——容器介面卡

1、stack2、priority_queue           #include<queue>(1)基礎介紹priority_queue 優先佇列,其底層是用堆來實現的。模板宣告帶有三個引數:priority_queue<Type, Container,

C++vector容器和list容器中使用單個迭代器的erase函式學習筆記

例題為:假設有如下ia的定義,ia複製到vector和list中,把list容器中奇數值元素刪除掉,把vector容器偶數值元素刪除掉。 陣列複製採用push_back操作。刪除操作採用了erase函式,由於該函式返回值為指向被刪除元素後面的元素,則使用了返回值賦值回給迭代

c++容器vector

vector是一個變長陣列容器類模板,資料在vector中連續儲存 建構函式: vector() explicit vector(const _Alloc& _Al) vector<int> A; //建立一個空的的容器

C++判斷元素是否在vector中,對vector去重,兩個vector求交集、並集

bool iostream space col 求交集 uniq AI void print #include <iostream> #include <vector> #include <algorithm> //sort函數、交並補

C++Vector的陣列用法(二)

1.定義 vector<vector<int>>a; 2.初始化 a.resize(row,vector<int>(column)); a.resize(row);for (int i = 0; i < row;

C++Vector的知識點(一)

概況 vector是c++中的容器,作用相當於動態陣列,可以用於存放各種型別(int、double、string、struct)的資料 基本操作 尾部插入元素 vec.push_back(a)

C#資料結構001-線性表:順序

C#資料結構:順序表結構 1、自定義順序表結構 using System.Collections; using System.Collections.Generic; /// <summary> ///線性表介面 /// </summary> /// <type

C++ 刪除vector中重複元素

程式碼: vector<int> v={1,2,4,3,5.2}; sort(v.begin(),v.end()); v.erase(unique(v.begin(),v.end()),v.end()); 解釋: unique函式是一個去重函式,去

C++STL常用容器總結之十二:string類

13、string類 宣告 string類本不是STL的容器,但是它與STL容器有著很多相似的操作,因此,把string放在這裡一起進行介紹。 之所以拋棄char*的字串而選用C++標準程式庫中的string類,是因為他和前者比較起來,不必擔心記憶體是

C++std::vector原始碼淺析

std::vector是stl標準模板庫中的一個序列容器,其原始碼實現有幾個特點: (1)C++中include的標準標頭檔案是沒有“.h”字尾的,其實這是C++的一層包裹,內部實現還是在“.h”檔案中完成的,以我們include的vector為例,其中還會i

C++STL常用容器總結之四:連結串列list

5、連結串列list List是每個節點包含前驅指標、後繼指標和資料域三個部分的雙向連結串列。List不提供隨機存取,訪問元素需要按順序走到需存取的元素,時間複雜度為O(n),在list的任何位置上執行插入或刪除操作都非常迅速,只需在list內部調整一下指標。

C++STL常用容器總結之八:對映map

9、對映map Map是鍵-值對的集合,map中的所有元素都是pair,可以使用鍵作為下標來獲取一個值。Map中所有元素都會根據元素的值自動被排序,同時擁有實值value和鍵值key,pair的第一元素被視為鍵值,第二元素被視為實值,同時map不允許兩個元素有

C++判斷順序棧出棧順序的合法性

//判斷順序棧出棧順序的合法性思想: //給定一個入棧的字串pushstr,再給定一個出棧的字串popstr,根據棧的特性,判斷該出棧順序是否合法 //1.先驗證兩個字串的長度是否相等,不等,則肯定不合法;相等,再進行步驟2. //2.(1)判斷pushstr與popstr