什么是vector

向量(Vector)是一个封装了动态大小数组的顺序容器(Sequence Container)。跟任意其它类型容器一样,它能够存放各种类型的对象。可以简单的认为,向量是一个能够存放任意类型的动态数组。

vector基本的一些实现

构造函数

vector<type> 数组名:创建一个vector数组

向构造的数组中添加或删除元素

void push_back(x):向量尾部增加一个元素X
void pop_back():删除向量中最后一个元素
void clear():清空向量中所有元素

判断是否为空

bool empty() const:判断向量是否为空,若为空,则向量中无元素

元素个数

int size() const:返回向量中元素的个数
int capacity() const:返回当前向量所能容纳的最大元素值
int max_size() const:返回最大可允许的vector元素数量值

使用vector来定义一个矩阵(二维数组),对其初始化,并对其属性进行输出

  • 方法一:这是一个例子
# include<vector>
# include <iostream>
int main()
{
    using namespace std;
    vector<vector<int>> array(3);
    const int COL = 4;
    for ( int i=0; i < 3; i++)
    {
        array[i].resize(COL);
    }
    array[2][3] = 5;
    cout << "array[3][3]:" << array[2][3] << endl;
    cout << "array的行数" << array.size() << endl;
    cout << "array的列数" << array[0].size() << endl;
    system("pause");
    return 0;

}

c++中序列式容器的一个共性函数,vv.resize(int n,element)表示调整容器vv的大小为n,扩容后的每个元素的值为element,默认为0,resize()会改变容器的容量和当前元素个数。

  • 方法二:构造二维数组并进行值的初始化
vector<vector<int>> vv1(5);//定义数组vv1并将其初始化为5个size为0的vector
//再初始化每个vv1[i]
for(int i=0;i<vv1.size();i++)
{
	vv1[i] = vector<int> (5,i);//给每个vv1[i]分配5个对应下标元素的内容,即第一行全为0,第二行权威1,以此类推
}

  • 方法三“”使用指针构建二维数组
//C++ 构建二维动态数组
int **p;
p = new int*[10];    //注意,int*[10]表示一个有10个元素的指针数组
for (int i = 0; i < 10; ++i)
{
    p[i] = new int[5];
}
  • 方法4:使用vector构建二维数组
//用vector构建二维数组
vector<vector<int>> matrix;
vector<int>a;
a.push_back(1);
a.push_back(3);
a.push_back(1);
matrix.push_back(a);
  • 方法5:
auto f = vector < vector <int> > (s1.size() + 1, vector <int> (s2.size() + 1, false));

auto可以在声明变量的时候根据变量初始值的类型自动为此变量选择匹配的类型。

输出vector中的元素

vector输出数字数组
  • 例子1
#include <iostream>
#include <vector>
using namespace std;
int main()
{
    vector<int> numberVector;
    numberVector.push_back(1);//向数组中添加元素
    numberVector.push_back(10);
    numberVector.push_back(100);
    numberVector.push_back(1000);
    for (int i=0;i<numberVector.size();i++)
        cout<<numberVector.at(i)<<endl;
    return 0;
 }
  • 例子2
//输出Vector的中的元素方法一
vector<float> vecClass;
int nSize = vecClass.size();
//打印vecClass,方法一:

for(int i=0;i<nSize;i++)
{
cout<<vecClass[i]<<" ";
}
cout<<endl;
//需要注意的是:以方法一进行输出时,数组的下表必须保证是整数。
//打印vecClass,方法二:
for(int i=0;i<nSize;i++)
{
cout<<vecClass.at(i)<<" ";
}

//打印vecClass,方法三:输出某一指定的数值时不方便

for(vector<float>::iterator it = vecClass.begin();it!=vecClass.end();it++)
{
cout<<*it<<" ";
}
cout<<endl;
vector输出字符数组
  • 方法一:
vector<string> word;
 for (int i = 0; i < word.size(); i++)
    {
        cout << word[i] << endl;
    }
  • 方法二:
//在c++中用cout输出整个字符数组:

char*p="Hello,World!";

cout<<p<<endl;//输出Hello,World!

cout<<*p<<endl;//输出H

cout<<(void*)p<<endl;

cout<<';'<<endl;//输出分号";"

vector定义一维数组并初始化的几种方式:

(1)不带参数的构造函数初始化

//初始化一个size为0的vector
vector<int> abc;

(2)带参数的构造函数初始化

//初始化size,但每个元素值为默认值
vector<int> abc(10);    //初始化了10个默认值为0的元素
//初始化size,并且设置初始值
vector<int> cde(101);    //初始化了10个值为1的元素

(3)通过数组地址初始化

int a[5] = {1,2,3,4,5};
//通过数组a的地址初始化,注意地址是从0到5(左闭右开区间)
vector<int> b(a, a+5);

或者:

int a[] = {1,2,3,4,5,5};
vector<int> aa(a, a+sizeof(a)/sizeof(int));

(4)通过同类型的vector初始化

vector<int> a(5,1);
//通过a初始化
vector<int> b(a);

(5)通过insert初始化

//insert初始化方式将同类型的迭代器对应的始末区间(左闭右开区间)内的值插入到vector中
vector<int> a(6,6);
vecot<int> b;
//将a[0]~a[2]插入到b中,b.size()由0变为3
b.insert(b.begin(), a.begin(), a.begin() + 3);

insert也可通过数组地址区间实现插入

int a[6] = {6,6,6,6,6,6};
vector<int> b;
//将a的所有元素插入到b中
b.insert(b.begin(), a, a+7);

此外,insert还可以插入m个值为n的元素

//在b开始位置处插入6个6
b.insert(b.begin(), 6, 6);

(6)通过copy函数赋值

vector<int> a(5,1);
int a1[5] = {2,2,2,2,2};
vector<int> b(10);


/*将a中元素全部拷贝到b开始的位置中,注意拷贝的区间为a.begin() ~ a.end()的左闭右开的区间*/
copy(a.begin(), a.end(), b.begin());

//拷贝区间也可以是数组地址构成的区间
copy(a1, a1+5, b.begin() + 5);

几种重要的算法

使用时需要包含头文件#

  1. sort(v6.begin(), v6.end()); // 排序(从小到大)

  2. reverse(v6.begin(), v6.begin()+3); // 元素倒置

  3. int num =count(v6.begin(), v6.end(), ‘Z’); //在v6中的从v6.begin()到v6.end()的元素中查找’Z’的个数

cout语句格式控制输出

  • setw(n),控制预设宽度。 setw()只对其后面紧跟的输出产生作用。若输入的内容超过setw()设置的长度,则按实际长度输出。默认右对齐。

  • setfill(char c),就是在预设宽度中如果已存在没用完的宽度大小,则用设置的字符c填充。

  • left和right,更改对齐方式。默认的是右对齐。

  • fixed,使用小数计数法

  • setprecision(n)可控制输出流显示浮点数的精度,即小数点后的位数。

  • scientific ,使用科学计数法。

  • showpos,在正数之前加上正号。

  • 有关进制输入
    *dec 以十进制形式输出整数 常用
    hex 以十六进制形式输出整数
    oct 以八进制形式输出整数
    fixed 以普通小数形式输出浮点数

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐