1. 程式人生 > >向量容器vector模板

向量容器vector模板

#include 
#include 
using namespace std;
#define SIZE 10

template 
class CVector {
private:
    T *m_data;      //資料
    int m_size;     //向量長度
    int capacity;   //向量容器初始大小
public:
    CVector() {
        capacity = SIZE;
        m_data = new T[capacity];
        m_size = 0;
    }//無參建構函式,向量容器為初始長度
    CVector(int n) : m_size(n), capacity(n) {
        m_data = new T[capacity];
    }//有參建構函式,引數為向量容器的長度
    CVector(int n, T x) : m_size(n), capacity(n) {
        capacity = SIZE;
        m_data = new T[capacity];
        for (int i = 0; i < m_size; i++)
            m_data[i] = x;
    }//有參建構函式,引數為換成那個度與初始化內容
    CVector(const CVector &v) {
        m_size = v.m_size;
        capacity = v.capacity;
        m_data = new T[capacity];
        for (int i = 0; i < m_size; i++)
            m_data[i] = v.m_data[i];
    }//拷貝建構函式
    ~CVector() {
        delete[]m_data;
        m_size = 0;
        capacity = 0;
    }//解構函式
    int size() const {
        return m_size;
    }//返回向量容器的長度
    void resize(int newSize) {
        if (newSize < capacity)
            return;//若不符合條件則退出
        T *temp = new T[newSize];//定義更大的空間
        for (int i = 0; i < m_size; i++)
            temp[i] = m_data[i];
        delete[]m_data;//釋放原有空間
        m_data = temp;//將更大的空間設定為正式空間
        capacity = newSize;//定義新的容器大小
    }//擴充向量容器
    void push_back(T x) {
        if (m_size == capacity)
            resize(capacity * 2);
        m_data[m_size++] = x;
    }//向向量後面插入一個元素
    void pop_back() {
        m_size--;
    }//刪除最後一個數據
    T &operator[](int i) {
        if (i >= m_size || i < 0)
            throw "invalid index:";//下標異常丟擲
        return m_data[i];
    }//[]下標運算子的過載
};

template 
void Order(T &Order) //命令函式模板
{
    int n;
    cin >> n;
    CVector v(n);
    string order;   //命令輸入
    T x;            //追加的物件
    int index;      //插入地址的下標
    while (cin >> order) {
        try {
            if (order == "push") {//push物件,在向量尾部追加物件
                cin >> x;
                v.push_back(x);
            }
            else if (order == "put") {//put下標加物件,在特定下標處插入物件
                cin >> index >> x;
                v[index] = x;
            }
            else if (order == "fetch") {//fetch用下標取出物件,下標越界處理
                cin >> index;
                cout << v[index] << " ";
            }
            else if (order == "quit")
                break;
        } catch (const char *msg) {
            cout << msg << index << " ";
        }
    }
    cout << endl;
}

int main()
{
    string order;
    int n;
    while (cin >> order) {
        if (order == "int")
            Order(n);
        if (order == "string")
            Order(order);
    }
    return 0;
}

相關推薦

向量容器vector模板

#include #include using namespace std; #define SIZE 10 template class CVector { private: T *m_data; //資料 int m_size; //向量長度 int ca

Chapter9.4 陣列的替代品 向量容器vector,是一個快速的動態分配記憶體的陣列

1.動態陣列,可以在執行階段設定長度;而靜態陣列的長度是常量; 2.向量容器vector具有陣列的快速索引方式; 3.可以插入和刪除元素; 向量容器vector的定義和初始化 vector<double>vec1; /**向量容器的名稱是vec1,裡面放置double型別

vector向量容器(常用的使用方法總結)

不但 追加 begin vector for 一個 添加 tor 初始化 關於STL中vector容器的學習,編譯運行後邊看代碼,邊看執行結果效果更佳,還是想說看別人的代碼一百遍,不如自己動手寫一遍。 vector向量容器不但能像數組一樣對元素進行隨機訪問,還能隨時在尾部插

c++ Vector向量容器

使用Vector需要先在標頭檔案定義#include<vector> 1:通過例項瞭解如何賦值,新增,刪除  #include <iostream> #include<vector> using namespace std; int main()

vector向量容器的過載實現及其常見成員函式

vector的過載實現以及常見成員方法 文章目錄 vector的過載實現以及常見成員方法 1,vector定義 2,vector過載的實現 3,vector常見的成員方法

一、Vector向量容器

簡介:Vector向量容器可以簡單的理解為一個數組,它的下標也是從0開始的,也就是說,如果vector容器的大小是n,那麼,元素的下標是0~n-1。使用時可以不用確定大小。vector具有記憶體自動管理的功能,對於元素的插入和刪除,它可以進行動態調整所佔用的記憶體空間,它裡面有很多系統已經定義好了的

STL—vector(向量容器)

什麼是vector: vector是一種可以完全代替陣列的高效容器。完全代替陣列的意思就是,陣列能幹的vector都能幹,如隨機訪問元素,用下標遍歷元素等。陣列不能幹的它也能幹,如記憶體自動管理功能,即

vector(向量容器)

vector相當於動態陣列,可以從尾部快速的插入和刪除元素。支援隨機訪問。 如果初始分配的空間不夠,當超過空間大小時會重新分配更大的空間(通常按照兩倍大小擴充套件),此時需要進行大量的元素複製,從而增加了效能開銷。 1、定義vector向量的幾種方式  ve

第六章Vector向量容器

   作為陣列的一個泛化的vector容器,不僅可以進行陣列一樣的元素隨機訪問,還可以在容器的尾端插入新元素。 vector具有自動的記憶體管理功能,對於元素的插入和刪除,可動態調整所佔用的記憶體空間。   建立vector物件 (1)

vector向量容器的刪除

erase()方法可以刪除vector中迭代器所指的一個元素或一段區間中所有元素。 clear()方法則一次性刪除vector中所有的元素。  #include<vector> #include<iostream> using namespace

STL 向量容器vector

向量容器使用動態陣列儲存、管理物件。因為陣列是一個隨機訪問資料結構,所以可以隨機訪問向量中的元素。在陣列中間或是開始處插入一個元素是費時的,特別是在陣列非常大的時候更是如此。然而在陣列末端插入元素卻很快。實現向量容器的類名是vector(容器是類模板)。包含vector類的標

C++STL之vector向量容器

++i 反向 規則 push_back 初始化 調整 har algorithm 大小 vector向量容器 vector向量容器不但能向數組一樣對元素進行隨機訪問, 還能在尾部插入元素 vector具有內存自動管理的功能, 對於元素的插入和刪除, 可動態調整所占

STL淺析——序列式容器vector的構造和內存管理: constructor() 和 push_back()

技術 eal ace name des 分享 names private rst   咱們先來做一個測試capacity是容器容量,size是大小: #include <iostream> #include <vector> using names

簡單重寫容器vector

begin temp int sizeof col push pub int() clear 1 #pragma once 2 #include <iostream> 3 using namespace std; 4 5 template

143.vector模板

change 數組 eal sizeof hang names ont bsp chan myvector.h 1 #pragma once 2 #include <initializer_list> 3 #include <iostream&g

向量vector

數組 抽象數據類型 實現 find 組元 pan 結構 遞增 線性 1.接口與實現 1.1 抽象數據類型:一組數據模型上定義的一組操作 數據類型是(char、int等) 數據結構:基於特定語言的,實現ADT的一整套算法。 1.2 向量:向量是數組的抽象與泛化,由一組元

Silverlight & Blend動畫設計系列十:Silverlight中的坐標系統(Coordinate System)與向量Vector)運動

過度 highlight 圖片 nbsp mgr ack jpg .com bsp 原文:Silverlight & Blend動畫設計系列十:Silverlight中的坐標系統(Coordinate System)與向量(Vector)運動  如果我們習慣於數學坐

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

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

Vertor向量容器

標頭檔案: #include<vector> 定義: vector<int> v;  vector<float> v(10);  vector<float> v(10,8.6); 初始數目,初始

C++筆記 -- 序列容器vector

向量(vector) 向量(vector)是表示可以改變大小的陣列的序列容器。 就像陣列一樣,向量使用連續的儲存位置作為元素,這意味著它們的元素也可以使用常量指向其元素的偏移來訪問,並且與陣列一樣有效。但與陣列不同是向量的大小可以動態變化,其儲存由容器自動處理。 在內部,向量使用動態分配的陣