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 
#include 
#include 

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 
#include 
#include 

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 
#include 
#include 

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 
#include 

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 
#include 

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];
    }
}

你可能感兴趣的:(2017-2018寒假,数据结构,STL,ACM,C++,STL,编程)