Vector的相關內容

Vector的相關內容

關於容器 
c++中有兩種類型的容器:順序容器和關聯容器 
順序容器:vector、list、deque等。其中vector表示一段連續的內存地址,基於數組的實現,list表示非連續的內存,基於鏈表實現。deque與vector類似,但是對於首元素提供刪除和插入的雙向支持。 
關聯容器:map、set。map是key-value形式的,set是單值。map和set只能存放唯一的key值,multimap和multiset可以存放多個相同的key值。 
容器類自動申請和釋放內存,我們無需new和delete操作。1


關於vector

vector(向量): C++中的一種數據結構,確切的說是一個類.它相當於一個動態的數組,當程序員無法知道自己需要的數組的規模多大時,用其來解決問題可以達到最大節約空間的目的.2


vector定義和初始化

vector<int> vec1;    //默認初始化,vec1爲空,類型爲int
vector<int> vec2(vec1);  //使用vec1初始化vec2
vector<int> vec3(vec1.begin(),vec1.end());//使用vec1初始化vec2
vector<int> vec4(10);    //10個值爲0的元素
vector<int> vec5(10,4);  //10個值爲4的元素
  • 1
  • 2
  • 3
  • 4
  • 5

vec.push_back()

在vector類中作用爲在vector尾部加入一個數據。 
vec.push_back(1);


vec.insert()

//用法1:在指定位置it前“插入”值爲val的元素,返回指向這個元素的迭代器,  
iterator insert( iterator it, const TYPE &val );   

//用法2:在指定位置it前“插入”num個值爲val的元素   
void insert( iterator it, size_type num, const TYPE &val );   

//用法3:在指定位置it前“插入”區間[start, end)的所有元素.   
void insert( iterator it, input_iterator start, input_iterator end );   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

vec.erase()

(1)erase(pos,n); 刪除從pos開始的n個字符,比如erase(0,1)就是刪除第一個字符 
(2)erase(position);刪除position處的一個字符(position是個string類型的迭代器) 
(3)erase(first,last);刪除從first到last之間的字符(first和last都是迭代器)

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

int main ()
{
  string str ("This is an example phrase.");
  string::iterator it;

  // 第(1)種用法
  str.erase (10,8);
  cout << str << endl;        // "This is an phrase."

  // 第(2)種用法
  it=str.begin()+9;
  str.erase (it);
  cout << str << endl;        // "This is a phrase."

  // 第(3)種用法
  str.erase (str.begin()+5, str.end()-7);
  cout << str << endl;        // "This phrase." 閉區間全刪了
  return 0;
}

vector<\type>::iterator name

vector<int>::iterator it; 
這條語句定義了一個名爲it的變量,它的數據類型是由vector定義的iterator類型。

初始化

it=vec.begin(); 
指向了容器的首個元素

訪問

*it 
訪問迭代器指向的元素

運算

iterator除了進行++,–操作,可以將iter+n,iter-n賦給一個新的iteraor對象。還可以使用一個iterator減去另外一個iterator.

常用的一個格式

(我覺得常用的(逃))

#include <vector>
#include <iostream>

using namespace std;

int main() {
vector<int> ivec;
ivec.push_back(1);
ivec.push_back(2);
ivec.push_back(3);
ivec.push_back(4);

for(vector<int>::iterator iter = ivec.begin();1. iter != ivec.end(); ++iter)//遍歷
cout << *iter << endl;
}

迭代器與指針的差別

迭代器: 
(1)迭代器不是指針,是類模板,表現的像指針。他只是模擬了指針的一些功能,通過重載了指針的一些操作符,->,*,++ –等封裝了指針,是一個“可遍歷STL( Standard Template Library)容器內全部或部分元素”的對象, 本質是封裝了原生指針,是指針概念的一種提升(lift),提供了比指針更高級的行爲,相當於一種智能指針,他可以根據不同類型的數據結構來實現不同的++,–等操作; 
(2)迭代器返回的是對象引用而不是對象的值,所以cout只能輸出迭代器使用*取值後的值而不能直接輸出其自身。 
(3)在設計模式中有一種模式叫迭代器模式,簡單來說就是提供一種方法,在不需要暴露某個容器的內部表現形式情況下,使之能依次訪問該容器中的各個元素,這種設計思維在STL中得到了廣泛的應用,是STL的關鍵所在,通過迭代器,容器和算法可以有機的粘合在一起,只要對算法給予不同的迭代器,就可以對不同容器進行相同的操作。 
指針: 
指針能指向函數而迭代器不行,迭代器只能指向容器;指針是迭代器的一種。指針只能用於某些特定的容器;迭代器是指針的抽象和泛化。所以,指針滿足迭代器的一切要求。 
:迭代器在使用後就釋放了,不能再繼續使用,但是指針可以!!

總之,指針和迭代器是有很大差別的,雖然他們表現的行爲相似,但是本質是不一樣的!一個是類模板,一個是存放一個傢伙的地址的指針變量。 

 


#include <iostream>
#include<vector>
using namespace std;
 
void main(){
 
    vector<int> the_vector;
    vector<int>::iterator the_iterator;
 
    for (int i = 0; i < 10; i++)
        the_vector.push_back(i);
 
    int total = 0;
    the_iterator = the_vector.begin();
    while (the_iterator != the_vector.end()) {
        total += *the_iterator;
        the_iterator++;
    }
    cout << "Total=" << total << endl;
    printf("hello...\n");
    system("pause");
    return;
}

運行結構爲:Total=45

                      hello.....

//轉自:https://blog.csdn.net/weixin_39777226/article/details/79192770

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章