STL_vector_不定长数组

vector是STL中的一种容器, 是一种不定长的数组.

包含在vector头文件中
使用方式为

vector< int >vec; //定义了一个vec数组
vector< int > vec(10); //定义了元素数, 各元素都为0


size()函数 //返回数组元素数, 即数组大小
resize()函数 //重置数组大小
push_back(argu) //函数向后添加元素argu
pop_back() //删除最后一个元素
clear()函数 //将数组清空

resize()可以设置数组大小, 元素全为0

vector< int > vec(3); //元素数为3
vec.resize(5); //扩展为5, 元素值都为0

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main()
{
    vector <int> vec;
    cout << "vec.size() = " << vec.size() << endl;
    vec.push_back(4);
    vec.push_back(5);
    cout << "vec.size() = " << vec.size() << endl;
    vec.pop_back();
    cout << "vec.size() = " << vec.size() << endl;
    vec.resize(4);
    cout << "vec.size() = " << vec.size() << endl;
}

有 :
begin()函数, 返回数组的第一个元素的位置
end()函数, 返回数组的最后一个元素的下一个位置
插入函数insert() //插入到当前指针位置, 原来的元素向后移
删除函数erase() //删除当前指针位置的元素, 之后的元素向前移动
判断是否为空函数empty() //返回bool数

代码示例:

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main()
{
    vector<int>vec;
    for(int i = 0; i < 20; ++i) {
        vec.push_back(i);
    }
    for(int i = 0; i < 20; ++i) {
        cout << vec[i]<< endl;
    }
    vec.insert(vec.begin(), -1);
    for(int i = 0; i < 20; ++i) {
        cout << vec[i]<< endl;
    }
    vec.erase(vec.end() - 1);
    for(int i = 0; i < 20; ++i) {
        cout << vec[i]<< endl;
    }
}

三种打印方式

  1. 传统的下标, 如vec[1]
  2. vec.at(i), 使用at函数的参数表示位置
  3. 使用迭代器的方法

代码示例:

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main()
{
    vector<int>vec;
    for(int i = 0; i < 20; ++i) {
        vec.push_back(i);
    }
    for(int i = 0; i < 20; ++i) {
        cout << vec[i]<< endl;
    }
    for(int i = 0; i < 20; ++i) {
        cout << vec.at(i)<< endl;
    }
    vector<int>::iterator it = vec.begin();
    while(it != vec.end()) {
        cout << *it << endl;
        it++;
    }
}

一些相关函数

使用reverse将元素翻转

reverse(vec.begin(),vec.end());
//将元素翻转

使用sort排列

sort(vec.begin(), vec.end(), cmp);
cmp为自定义的比较函数

多维数组声明方式

vector< int> vec[100];
以上声明了一个元素数为100的vector数组
注意: 数组大小固定
同理有其他多维
vector < int > vec[100][100][100];
但这些除最后一维其他维都是固定的

另一种声明方式
vector < vector< int > > vec;
如:

#include <iostream>
#include <vector>

using namespace std;

int main()
{
    vector< vector<int> > vec(20);
    for( int i = 0; i < 20; ++i ) {
        vec[i].resize(20);
    }
    for( int i = 0; i < 20; ++i ) {
        for( int j = 0; j < 20; ++j ) {
            cout << vec[i][j] << ' ';
        }
        cout << endl;
    }
    cout << vec.size() << endl;
}
#include <iostream>
#include <vector>

using namespace std;

int main()
{
    vector <int> vec(100);
    for( int i = 0; i < 100; ++i ) {
        cout << vec[i] << endl;
    }
    cout << vec.size() << endl;
    vector <int> vecc;
    vecc.resize(10000);
    for( int i = 0; i < 10000; ++i ) {
        cout << vecc[i] << ' ';
    }
    vec.push_back(3);
    cout << endl;
    for( int i = 0; i < 101; ++i ) {
        cout << vec[i];
    }
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值