一,STL

STL包含了容器,算法,迭代器等六个组件

每个容器都有自己专属的迭代器(提供一种方法按序寻找其中的各个元素)

其中迭代器可以理解为指向容器元素的指针

二,初识vector容器

vector容器与数组非常相似,不同在于数组是静态空间,vector数组为动态空间(可以随时扩展)。

vector可以进行赋值,插入,删除,预留空间,互换容器等操作。

#include <iostream>
#include <vector>

int main() {
    std::vector<int> vec1;                  // 空的vector
    vec1.begin()                            //类似指针,它指向这个容器的首个元素
    vec1.end()                              //类似指针,它指向这个容器的最后一个元素的下一位
    std::vector<int> vec2(5);               // 长度为5的vector,元素默认初始化
    std::vector<int> vec3(5, 10);           // 长度为5的vector,元素值为10
    std::vector<int> vec4 = {1, 2, 3, 4};   // 使用初始化列表初始化

    return 0;
}
#include<vector>
#include<algorithm>
#include<iostream>
using namespace std;

int main() {
    // 声明一个存储整型数的 vector,其名为numbers
    std::vector<int> numbers;

    // 在末尾添加元素
    numbers.push_back(10);  
    numbers.push_back(20);
    numbers.push_back(30);

    // 输出 vector 中的元素
   printf( "Vector contains: ");
    for (int i = 0; i < numbers.size(); ++i) {
        std::cout << numbers[i] << " ";
    }
    std::cout << std::endl;

    // 添加更多元素
    numbers.push_back(40);
    numbers.push_back(50);

    // 再次输出 vector 中的元素
    std::cout << "After adding more elements, vector contains: ";
    for (int i = 0; i < numbers.size(); ++i) {
        std::cout << numbers[i] << " ";
    }
    std::cout << std::endl;

    // 访问特定元素
    std::cout << "The first element is: " << numbers[0] << std::endl;

    // 清空 vector
    numbers.clear();

    // 检查 vector 是否为空
    if (numbers.empty()) {
        std::cout << "The vector is now empty." << std::endl;
    }

    return 0;
}

利用自带的算法,遍历vector容器

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

void myprint(int a) {
    cout << a << endl;
}

int main() {
    vector<int> h = {10,20,30,40};
    for_each(h.begin(), h.end(),myprint);      //利用自带的遍历算法

    return 0;
}

三,vector容器储存自定义数据类型/嵌套

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

class Person {
public:
    Person(string name, int age) {
        this->m_name = name;
        this->m_age = age;
    }
    int m_age;
    string m_name;
};
int main() {
    vector<Person> h;
    Person p1("a", 10);
    Person p2("b", 20);
    Person p3("c", 30);
 
    h.push_back(p1);
    h.push_back(p2);
    h.push_back(p3);



 vector<vector<int>>  h2;
 vector<int> v1;
 vector<int> v2;
 vector<int> v3;

 h2.push_back(v1);
 h2.push_back(v2);
 h2.push_back(v3);

    return 0;
}

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐