C/C++教程

c++学习笔记(三十一)stdvector动态数组

本文主要是介绍c++学习笔记(三十一)stdvector动态数组,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

        我们今天只说他是怎么使用的,创建和具体函数我先列出给各位

一、创建向量
Vector<类型>标识符
Vector<类型>标识符(最大容量)
Vector<类型>标识符(最大容量,初始所有值)
int i[5]={1,2,3,4,5};
Vector<类型>vi(I,i+2);//得到i索引值为3以后的值
Vector< vector< int> >v; 二维向量//这里最外的<>要有空格。否则在比较旧的编译器下无法通过

二、内置函数
1.push_back 在数组的最后添加一个数据
2.pop_back 去掉数组的最后一个数据
3.at 得到编号位置的数据
4.begin 得到数组头的指针
5.end 得到数组的最后一个单元+1的指针
6.front 得到数组头的引用
7.back 得到数组的最后一个单元的引用
8.max_size 得到vector最大可以是多大
9.capacity 当前vector分配的大小
10.size 当前使用数据的大小
11.resize 改变当前使用数据的大小,如果它比当前使用的大,则填充默认值
12.reserve 改变当前vecotr所分配空间的大小
13.erase 删除指针指向的数据项
14.clear 清空当前的vector
15.rbegin 将vector反转后的开始指针返回(其实就是原来的end-1)
16.rend 将vector反转构的结束指针返回(其实就是原来的begin-1)
17.empty 判断vector是否为空
18.swap 与另一个vector交换数据

        下面我将用代码让各位认识vector的使用。

#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;

//sort降序
bool cmp(int a,int b)
{
    return a > b;
}
void vector_learn()
{
    //定义一个向量
    std::vector <int> vec;
    cout << "使用数组输出:" << '\n';
    for(int i = 0;i < 10;++i)
    {
        //在末尾添加一个元素
        vec.push_back(i);
        cout << vec[i] << ",";//方法一,直接使用数组方式访问
    }
    //删除一个末尾元素
    vec.pop_back();
    cout << '\n';

    //方法二,使用迭代器将容器中数据输出
    vector<int>::iterator it;//声明一个迭代器,来访问vector容器,作用:遍历或者指向vector容器的元素
    cout << "使用迭代器输出:" << '\n';
    for(it = vec.begin();it != vec.end();it++)
    {
        cout << *it << " ";
    }
    cout << '\n';

    //取向量容器长度
    for(int i = 0;i < vec.size();i++)
    {
        cout << vec[i] << ",";
    }

    //清空数据
    vec.clear();
    //不执行
    for(int i = 0;i < vec.size();i++)
    {
        cout << vec[i] << ",";
    }
    cout << '\n';

    //向量排序
    vector <int> obj;
    obj.push_back(1);
    obj.push_back(3);
    obj.push_back(0);
    //升序
    sort(obj.begin(),obj.end());

    cout << "从小到大排序:" << endl;
    for(int i = 0;i < obj.size();i++)
    {
        cout << obj[i] << ",";
    }
    cout << '\n';

    //降序
    //sort(obj.begin(),obj.end(),cmp);
    for(int i = 0;i < obj.size();i++)
    {
        cout << obj[i] << ",";
    }
    cout << '\n';

    //逆序,翻转函数区间内的顺序
    reverse(obj.begin(),obj.end());
    for(int i = 0;i < obj.size();i++)
    {
        cout << obj[i] << ",";
    }
    cout << '\n';
    return ;
}

 

//使用向量手动输入一个二维数组
void cin_vector()
{
    vector< vector<int> > arry; //写成arry(5) 可理解为设定大小5行
    vector<int> d;        //定义一个一维的数组;
    int i, j, k, n;
    int number;

    scanf("%d", &n );
    /*可以这样实现对vector二维的初始化,得到的是n行n列的矩阵*/
    for( i = 0; i < n; i++ )
    {
        for( j = 0; j < n; j++ )
        {
            scanf("%d", &number );
            d.push_back( number );
        }
        sort( d.begin(), d.end() ); //pai xu xuyao头文件algorithm
        arry.push_back( d );
        //d.clear();        //清空一维的数组
        d.resize(0);
    }
    /*遍历输出*/
    if( arry.empty() )
        printf("0\n");
    else{
        for( i = 0; i < arry.size(); i++ )
        {
            for( j = 0; j < arry[0].size(); j++ )
            {
                printf("%d ", arry[i][j] );
            }
            printf("\n");
        }
    }
    return ;
}

 

这篇关于c++学习笔记(三十一)stdvector动态数组的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!