矢量vector

vector存儲類對象:

#include "stdafx.h"
#include <iostream>
#include <vector>
using namespace std;
 
class point{
public:
    point(int _x =0, int _y =0 ):x(_x), y(_y){};
    int GetX(void) const { return x;}
    int GetY(void) const { return y;}
private:
    int x,y;
};

int _tmain(int argc, _TCHAR* argv[])
{
    vector<point> vec;
    vec.push_back(point(1,2));
    vec.push_back(point(2,2));
 
    for (auto itr = vec.cbegin(); itr != vec.cend(); ++itr)
    {
        cout<<"point("<<itr->GetX()<<","<<itr->GetY()<<")"<<endl;
    }

    getchar();
    return 0;
}

輸出結(jié)果:


result1.PNG

存儲類指針:

#include "stdafx.h"
#include <iostream>
#include <vector>
using namespace std;
 
class Point{
public:
    Point(int x =0, int y =0 ):x(x), y(y){};
    int GetX(void) const { return x;}
    int GetY(void) const { return y;}
private:
    int x,y;
};

int _tmain(int argc, _TCHAR* argv[])
{
    //存儲類指針
    vector<Point*> vecptr;
    for (int i = 0; i < 5; i++)
    {
        Point pt;
        Point* ptr=&pt; //此種方法為pt分配的地址都是一樣的,不可行
        vecptr.push_back(ptr);
    }
    for (int i = 0; i < vecptr.size(); i++)
    {
        cout<<vecptr[i]<<endl;  //地址都相同
    }
    cout<<endl;
    cout<<endl;

    vecptr.clear(); //清空矢量容器
    for (int i = 0; i < 5; i++)
    {
        Point* ptr=new Point(); //此法可行,分配成功返回地址
        vecptr.push_back(ptr);
    }
    for (int i = 0; i < vecptr.size(); i++)
    {
        cout<<vecptr[i]<<endl;  //地址都不同,可行
    }
    cout<<endl;

    //存儲類對象
    vector<Point> vec;
    for (int i = 0; i < 10; i++)
    {
        Point pt;
        vec.push_back(pt);
    }
    for (int i = 0; i < vec.size(); i++)
    {
        cout<<&vec[i]<<endl;
    }
    getchar();
    return 0;
}

輸出結(jié)果:


result2.PNG

指向基類的vector用法:

#include "stdafx.h"
#include <iostream>
#include <vector>
using namespace std;
 
class Polygon 
{
protected:
    int width, height;
public:
    void set_values (int a, int b)
    {
        width=a; 
        height=b; 
    }
    virtual int area() const = 0;
};
 
class Rectangle: public Polygon 
{
public:
    virtual int area() const 
    { 
        return width*height;
    }
};
 
class Triangle: public Polygon 
{
public:
    virtual int area() const 
    { 
        return width*height/2; 
    }
};
int _tmain(int argc, _TCHAR* argv[])
{
    Rectangle rect;
    Triangle trgl;
    vector<Polygon*> vec;   //指向基類的矢量容器

    Polygon * ppoly1 = &rect;
    ppoly1->set_values (4,5);
    vec.push_back(ppoly1);

    Polygon * ppoly2 = &trgl;
    ppoly2->set_values (4,5);
    vec.push_back(ppoly2);
    
    for (auto itr = vec.cbegin(); itr != vec.cend(); ++itr) //不知道用什么類型時可以選擇用auto
    {
        cout << (*itr)->area() << '\n';
    }
    getchar();
    return 0;
}

輸出結(jié)果:
20
10

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,754評論 18 399
  • 1.C和C++的區(qū)別?C++的特性?面向?qū)ο缶幊痰暮锰帲?答:c++在c的基礎(chǔ)上增添類,C是一個結(jié)構(gòu)化語言,它的重...
    杰倫哎呦哎呦閱讀 9,631評論 0 45
  • 三十歲的女人像玫瑰,迷人; 三十歲的女人像蘋果,好看又好吃; 三十歲的女人像一杯茶,清香,怡人; 三十歲的女人像一...
    半象花閱讀 851評論 8 3
  • 讓你放開你的手機一小時,你最想干什么?
    亨利何閱讀 902評論 2 1
  • 紅薯餐從17年1月開始,前4次185天,本次44天,償試180天。5年的高血壓藥停了13個月!虎杖粉加蘿卜麻藥方第...
    南得糊涂呀閱讀 115評論 0 0