国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

C++教程:C++向量講解

2020-05-23 14:26:11
字體:
來源:轉載
供稿:網友
向量(Vector)是一個深奧的詞。不過這里的向量不是數學里的向量,也不是物理里的向量。在C++中的向量,就是一個存放數據的地方,類似于一維數組和鏈表。

向量的性能

在第九章末尾,我們介紹了數組存儲和鏈表存儲的優缺點。數組的缺點是分配空間不靈活;鏈表的缺點是無法通過下標快速找到結點。然而這里介紹的向量卻吸收了這兩種數據結構各自的優點,綜合性能較高。

向量的分配空間是會隨著數據的量而變化的,如果空間不夠,那么向量的空間會自動增長。類似于數組,我們也可以通過下標來訪問向量中的數據元素,增快找到數據的速度。

萬用的模板

在編寫鏈表程序的時候,我們一定有這樣的困惑:鏈表里面存儲的數據類型可能是各種各樣的,難道我們要為各種數據類型都寫一個鏈表程序么?我們能不能寫一個萬用的鏈表程序呢?
在PowerPoint之類的軟件中,有一種模板功能。模板提供的文檔框架是基本完整的,我們只需要在一些地方填寫上自己需要的內容,就是一個完整的文檔。在C++中,也有這么一種模板(Template),我們只需要在使用之前填寫自己需要的數據類型,就是一個完整的程序。我們把具有模板功能的類稱為模板類,向量就是一個模板類。在這一節,我們只需要了解如何使用向量這個模板類。關于更多模板的知識,將在后面的章節再作介紹。

在上一節中,我們不難看出創建一個對象的方法是:
    類名對象名(初始化數據);
而創建一個模板類對象的方法是:
    類名<數據類型列表> 對象名(初始化數據);
即在類名之后填寫數據類型,來創造一個符合自己需要的對象。

對向量的操作

同字符串一樣,向量也有著自己的各種操作。下表就是向量常用的一些操作:
C++教程:C++向量講解
由于涉及迭代器(Iterator)的知識,我們無法學習向量的插入數據和刪除數據操作。有興趣的讀者可以去看一下《C++ Primer》的相關章節。

下面我們用向量來解決習題9.6.2,模擬一下棧操作:(程序13.4)
#include <vector>
#include <iostream>
using namespace std;
int main()
{
   vector<char> stack(0);//新建一個名為stack的存放字符數據的向量,初始元素個數為0
   char temp;
   cout <<"請輸入指令:" <<endl;
   do
   {
      cin >>temp;
      if (temp!='#')
      {
         if (temp!='$')
         {
            stack.push_back(temp);//模擬壓棧操作
         }
        else
         {
            stack.pop_back();//模擬退棧操作
         } 
      }
   }while (temp!='#');
   for (int i=0;i<stack.size();i++)
      cout <<stack[i];//可以用下標訪問數據元素
   cout <<endl;
   return 0;
}

運行結果:
請輸入指令:
ABC$DEFG$$$HIJ$KLM$#
ABDHIKL

不難發現,用現成的向量來實現模擬棧的功能非常方便。我們不需要研究壓棧和退棧的詳細實現方法,而只需要知道何時操作就行了。

讀到這里,可能你還沒有完全明白到底什么是類,什么是對象,甚至搞不清創建對象的時候,對象名旁邊的括號里面應該填什么。沒關系,這些都不是本章所要掌握的內容。你只要會照貓畫虎地使用字符串和向量就可以了。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 泽普县| 义马市| 乐亭县| 光山县| 修武县| 正定县| 布尔津县| 洛南县| 荔浦县| 玉门市| 阳城县| 南通市| 郑州市| 长寿区| 金川县| 威远县| 汉寿县| 常熟市| 平谷区| 卓尼县| 江口县| 馆陶县| 闽侯县| 剑川县| 同心县| 邹城市| 高邮市| 高密市| 金川县| 台湾省| 那曲县| 双柏县| 溆浦县| 和平县| 古田县| 武清区| 乌拉特后旗| 凤城市| 辽阳县| 长海县| 保亭|