欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

vector的基本操作

程序员文章站 2022-03-01 23:19:03
...

定义、初始化

// 初始化
vector<int> ve; // size为0的vector
vector<int> ve(10); // size为10,默认值为0
vector<int> ve(10, 1);  // size为10,默认值为1

int a[5] = {1, 2, 3, 4 ,5};
vector<int> ve1(a, a + 5);  // 通过地址初始化
vector<int> ve2(ve1.begin(), ve1.end()); 

// 赋值
vector<int> a(10, 1);
vector<int> b(10, 100);
copy(b.begin(), b.begin() + 5, a.begin());  // copy函数

遍历vector,下标、迭代器、auto。

vector<int> ve;
//迭代器 
vector<int>::iterator it;
for(it = ve.begin(); it < ve.end(); it++) {
    printf("%d ",*it);
}

// auto
for (auto it : ve) {
     cou << it << endl;
}

修改元素

  • insert
//在起始位置插入 10 
ve.insert(ve.begin(),10);

//在起始位置插入 2个10 
ve.insert(ve.begin(), 2, 10);

//在起始位置插入 某个区间(地址) 
ve.insert(ve.begin(), ve2.begin(), ve2.end());
  • push_back
// 在vector后插入元素
ve.push_back()
  • pop_back()
// 删除最后一个元素
ve.pop_back()
  • ve.front() 、ve.back() 、ve.clear()

  • erase

//删除某个区间 
ve.erase(ve.begin(), ve.begin() + 1);

//删除某个位置 
ve.erase(ve.begin());

函数

  • accumulate 区域求和; 三个参数,前两个是范围,最后一个是初始值
vector<int> a(10, 1);
int sum = accumulate(a.begin(), a.end(), 0);

vector<string> a(10, "1");
string sum = accumulate(a.begin(), a.end(), string(""));
  • swap() 交换两个vector
swap(ve1, ve2)
ve1.swap(ve2)
  • reverse 翻转
reverse(ve.begin(), ve.end());
  • find 查找
头文件: #include <algorithm>

// 查找单个元素
vector<int>::iterator it;
it = find(ve.begin(), ve.end(), x);

// vector中查找结构体(重载 == )
- 结构体内部重载
struct ac{
    int x, y;
    bool operator == (const ac & a) {
        return a.x == x && a.y == y;
    }
};
- 结构体外部重载
struct ac{
    int x, y;
};
bool operator == (const ac &a, const ac &b) {
    return a.x == b.x && a.y == b.y;
}
it = find(v.begin(), v.end(), (ac){a, b});

// vector中查找pair(不需要重载 == )
it = find(v.begin(), v.end(), make_pair(a, b));