Bootstrap

C++算法竞赛基础语法-3

(一)vector容器

(1)vector容器的构造、插入与访问

默认构造vector <T> v;创建一个空的动态数组,不包含任何元素 

vector容器元素访问方式——下标访问和迭代器访问

1.下标访问 vector支持下标访问,像普通数组一样,可以使用vectorname[index]的形式来访问或修改元素,访问下标从0开始,直到vectorname.size() - 1

示例:对于vector<int> v,可以直接访问v[0]、v[1]等

2.迭代器访问 迭代器是一种类似于指针的对象,提供了对vector容器中元素的安全访问

定义迭代器的语法:vector<typename>::iterator it; 使用迭代器可以遍历vector中的所有元素,进行读取、修改等操作

示例:vector<int>::iterator it = v.begin();,这会将it指向v的第一个元素

#include <iostream>
#include <vector>
using namespace std;
int main()
{
    vector<int> v;
    v.push_back(1);
    v.push_back(2);
    v.push_back(3);
    v.push_back(4);
    v.push_back(5);
    for(auto x:v)
    {
        cout<<x<<" ";
    }
    return 0;

#include <iostream>
#include <vector>
using namespace std;
int main()
{
    vector<int> v;
    v.push_back(1);
    v.push_back(2);
    v.push_back(3);
    v.push_back(4);
    v.push_back(5);
    for(int i=0;i<v.size();i++)
    {
        cout<<v[i]<<" ";
    }
    return 0;

(2)vector的移除

pop_back() 方法,用于移除动态数组的最后一个元素

#include <iostream>
#include <vector>
using namespace std;
int main()
{
    vector<int> v;
    v.push_back(1);
    v.push_back(2);
    v.push_back(3);
    v.push_back(4);
    v.push_back(5);
    v.pop_back();//pop删除弹出最后一个元素
    for(int i=0;i<v.size();i++)
    {
        cout<<v[i]<<" ";
    }
    return 0;

(3)vector的赋值

指定大小的构造vector<T> v(size_type count);创建一个包含 count 个默认初始化元素的动态数组

size_type 一个类型定义(typedef),用于表示容器的大小或索引,通常是一个无符号整数类型,用于确保容器的大小和索引操作不会出现负值,从而避免潜在的错误

#include <iostream>
#include <vector>
using namespace std;
int main()
{
    vector<int> v(7);
    for(int i=0;i<v.size();i++)
    {
        v[i]=i;
        cout<<v[i]<<" ";
    }
    return 0;

(4)vector的resize

resize 方法用于动态调整容器的大小,同时根据需要添加或删除元素

#include <iostream>
#include <vector>
using namespace std;
int main()
{
    vector<int> v(7);
    v.resize(10);
    for(int i=0;i<v.size();i++)
    {
        v[i]=i;
        cout<<v[i]<<" ";
    }
    return 0;

(5)迭代器

迭代器提供了一种统一的方式来访问容器中的元素

#include <iostream>
#include <vector>
using namespace std;
int main()
{
     vector <int> v;
    v.push_back(1);
    v.push_back(2);
    v.push_back(3);
    v.push_back(4);
    v.push_back(5);
    vector<int>::iterator it;
    it=v.begin();
    for(auto x:v)
    {
     cout<<*it<<" ";
    *it++;
    }
    return 0;

(6)vector的clear

#include <iostream>
#include <vector>
using namespace std;
int main() {
   vector<int> v = {1, 2, 3, 4, 5};
   cout << "原来的vector容器内容 ";
   for (auto x : v) {//auto关键字用于自动类型推断,允许编译器根据初始化表达式来推断变量的类型
         cout << x<< " ";
    }
    cout <<  endl;
    v.clear();
    std::cout << "清空后vector容器的内容 ";
    if (v.empty()) {
      cout << "Empty" << endl;
    } 
    else {
        for (int x : v)
        {
            cout << x << " ";
        }
       cout << endl;
    }
    return 0;
}

#include <iostream>
#include <vector>
using namespace std;
int main() {
   vector<int> v = {1, 2, 3, 4, 5};
    auto it = v.begin() + 2;
    /*auto 关键字声明了一个迭代器变量 it
    将其初始化为指向 vector v 中第三个元素的位置
    */
    v .erase(it); 
    for (int x : v) {
         cout << x << " ";
    }
   cout << endl;

    return 0;
}

push_back(element):向vector的末尾添加一个新元素

pop_back():删除vector中的最后一个元素

size():返回vector中元素的个数

clear():删除vector中的所有元素,使其变为空 

erase(it):删除指定迭代器位置的元素 


(二)set容器

set为C++标准模板库(STL)中的一种有序容器 自动去重:set容器内部确保所有元素都是唯一的,自动去除重复的元素 自动排序:set容器中的元素会按照一定的顺序排列,默认情况下是升序排列

注意:set只支持迭代器访问

#include <iostream>
#include <set>
using namespace std;
int main()
{
    set<int> s;
    s.insert(2);
    s.insert(4);
    s.insert(6);
    s.insert(8);
    s.insert(10);
    set<int>::iterator it;
    for(it=s.begin();it!=s.end();it++)
    {
        cout<<*it<<" ";
    }
    return 0;
}

语法类似vector

insert(element):将一个新元素插入到set中

find(element):在set中查找一个元素

erase(element):删除set中指定的元素

size():返回set中元素的个数

clear():删除set中的所有元素

;