c语言编程笔录

首页 >   > 笔记大全

笔记大全

C常见容器如何使用

更新时间:2023-10-17

vector

vector即向量,是C++中最常用和最灵活的容器之一。它可以存储各种对象类型,且支持动态调整大小。以下是vector的定义和基本使用方法。

#include 
#include 
using namespace std;

int main() {
    // 定义一个空的vector,存储int类型数据
    vector<int> v1;
    
    // 在尾部添加元素
    v1.push_back(1);
    v1.push_back(2);
    v1.push_back(3);
    
    // 遍历元素
    for (int i = 0; i < v1.size(); i++) {
        cout << v1[i] << " ";
    }   // 输出:1 2 3
    
    // 在指定位置插入元素
    vector<int> v2 = {4, 5, 6};
    v1.insert(v1.begin() + 1, v2.begin(), v2.end());
    
    // 遍历元素
    for (int i = 0; i < v1.size(); i++) {
        cout << v1[i] << " ";
    }   // 输出:1 4 5 6 2 3
    
    // 删除指定元素
    v1.erase(v1.begin() + 2);
    
    // 遍历元素
    for (int i = 0; i < v1.size(); i++) {
        cout << v1[i] << " ";
    }   // 输出:1 4 6 2 3
    
    return 0;
}

list

list即双向链表,是C++标准库中的另一个常用容器。与vector相比,list插入和删除元素的效率更高,因为它不需要移动其他元素。以下是list的定义和基本使用方法。

#include 
#include 
using namespace std;

int main() {
    // 定义一个空的list,存储int类型数据
    list<int> l1;
    
    // 在尾部添加元素
    l1.push_back(1);
    l1.push_back(2);
    l1.push_back(3);
    
    // 遍历元素
    for (list<int>::iterator it = l1.begin(); it != l1.end(); it++) {
        cout << *it << " ";
    }   // 输出:1 2 3
    
    // 在指定位置插入元素
    list<int> l2 = {4, 5, 6};
    l1.insert(l1.begin(), l2.begin(), l2.end());
    
    // 遍历元素
    for (list<int>::iterator it = l1.begin(); it != l1.end(); it++) {
        cout << *it << " ";
    }   // 输出:4 5 6 1 2 3
    
    // 删除指定元素
    l1.erase(l1.begin());
    
    // 遍历元素
    for (list<int>::iterator it = l1.begin(); it != l1.end(); it++) {
        cout << *it << " ";
    }   // 输出:5 6 1 2 3
    
    return 0;
}

map

map即映射,是C++标准库中的关联容器之一。map以键值对(key-value pair)形式存储数据,键和值可以是任何类型。以下是map的定义和基本使用方法。

#include 
#include 
using namespace std;

int main() {
    // 定义一个空的map,将string类型与int类型进行映射
    map<string, int> m1;
    
    // 插入键值对
    m1.insert(pair<string, int>("apple", 3));
    m1.insert(pair<string, int>("book", 5));
    m1.insert(pair<string, int>("cat", 2));
    
    // 通过键访问值
    cout << m1["apple"] << endl;  // 输出:3
    
    // 遍历键值对
    for (map<string, int>::iterator it = m1.begin(); it != m1.end(); it++) {
        cout << it->first << ": " << it->second << endl;
    }   // 输出:apple: 3       book: 5        cat: 2
    
    // 删除指定键值对
    m1.erase("book");
    
    // 遍历键值对
    for (map<string, int>::iterator it = m1.begin(); it != m1.end(); it++) {
        cout << it->first << ": " << it->second << endl;
    }   // 输出:apple: 3       cat: 2
    
    return 0;
}

stack

stack即栈,是C++标准库中的容器之一。栈是一种后进先出(LIFO)的数据结构,只允许在栈顶进行插入和删除元素。以下是stack的定义和基本使用方法。

#include 
#include 
using namespace std;

int main() {
    // 定义一个空的stack,存储int类型数据
    stack<int> s1;
    
    // 在栈顶添加元素
    s1.push(1);
    s1.push(2);
    s1.push(3);
    
    // 访问栈顶元素
    cout << s1.top() << endl;  // 输出:3
    
    // 删除栈顶元素
    s1.pop();
    
    // 访问栈顶元素
    cout << s1.top() << endl;  // 输出:2
    
    return 0;
}
总结:C++标准库提供了许多不同的容器,每个容器都有自己的优点和适用场景。vector和list都是顺序容器,前者适用于大量访问元素的情况,后者适用于频繁插入和删除元素的情况。map是关联容器,适用于需要通过键访问值的情况。stack是适用于后进先出的栈结构。在使用容器时,需要考虑到数据类型、数据量、访问模式等多个因素,选择最合适的容器才能提高代码效率和性能。