美文网首页
C++ 容器的简单使用

C++ 容器的简单使用

作者: Vwwwwww | 来源:发表于2020-05-23 16:29 被阅读0次

vector 的使用

向量(Vector)是一个封装了动态大小数组的顺序容器(Sequence Container)。跟任意其它类型容器一样,它能够存放各种类型的对象。可以简单的认为,向量是一个能够存放任意类型的动态数组。

#include < vector> 
using namespace std;

int main(){

vector<uint8_t>  vector_tem;
//  push_back 向量尾部增加一个元素X
vector_tem.push_back(10);            
vector_tem.push_back(1);    
vector_tem.push_back(3);    

// 迭代输出
printf("vector_tem size : %lu ",vector_tem.size());
for(uint8_t i = 0; i<vector_tem.size();i++){
     // 注意点
     // 因为vector的size方法返回的是size_type 的无符号类型 所以用
     // 无符号的uint8_t 传递
    printf(" value: %d \n",vector_tem[i]);
}

// 元素的删除
if(vector_tem.size() > 0){
   // 获取首元素的引用 front
   if(vector_tem.front() == 10){
           // 删除指定的元素   begin是获取首元素的指针地址
          vector_tem.erase(vector_tem.begin());
   }
}
}

其他常用方法

增加函数

iterator insert(iterator it,const T& x):向量中迭代器指向元素前增加一个元素x

删除函数

iterator erase(iterator first,iterator last):删除向量中[first,last)中元素
void pop_back():删除向量中最后一个元素
void clear():清空向量中所有元素

遍历函数

reference at(int pos):返回pos位置元素的引用
reference front():返回首元素的引用
reference back():返回尾元素的引用
iterator begin():返回向量头指针,指向第一个元素
iterator end():返回向量尾指针,指向向量最后一个元素的下一个位置
reverse_iterator rbegin():反向迭代器,指向最后一个元素
reverse_iterator rend():反向迭代器,指向第一个元素之前的位置

引用 https://www.runoob.com/w3cnote/cpp-vector-container-analysis.html


map 的使用

map 是 STL 的一个关联容器,它提供一对一的hash
第一个称为关键字(key),每个关键字只能在map中出现一次;
第二个称为该关键字的值(value);

pair类型
在介绍关联容器操作之前,先了解一下 pair 的标准库类型。pair类型是在有文件 utility 中定义的,pair是将2个数据组合成一组数据,当需要这样的需求时就可以使用pair,如STL中的map就是将key和value放在一起来保存。另一个应用是,当一个函数需要返回2个数据的时候,可以选择pair。 pair的实现是一个结构体,主要的两个成员变量是first ,second 因为是使用struct不是class,所以可以直接使用pair的成员变量。
make_pair(v1, v2) : 以v1和v2值创建的一个新的pair对象

除此之外,pair对象还有一些方法,如取出pair对象中的每一个成员的值:
p.first 返回p的名为 first 的(公有)数据成员
p.second 返回p的名为second的(公有)数据成员

#include <stdio.h>
#include <string.h>
#include <string>
#include <utility>
using namespace std;

int main(){
    pair<int, string> p1(0, "Hello");
    printf("%d, %s\n", p1.first, p1.second.c_str());
    pair<int, string> p2 = make_pair(1, "World");
    printf("%d, %s\n", p2.first, p2.second.c_str());
    return 0;
}

map 基本操作

map是键-值对的组合,即map的元素是pair,其有以下的一些定义的方法:


#include <iostream>
#include <map>
#include <string>

int main() {
    std::map<char, std::string> mymap;
     // 使用下标 [ ] 访问
    mymap['a'] = "an element";
    mymap['b'] = "another element";
    mymap['c'] = mymap['b'];

    std::cout << "mymap['a'] is " << mymap['a'] << '\n';
    std::cout << "mymap['b'] is " << mymap['b'] << '\n';
    std::cout << "mymap['c'] is " << mymap['c'] << '\n';
    std::cout << "mymap['d'] is " << mymap['d'] << '\n';

    std::cout << "mymap now contains " << mymap.size() << " elements.\n";

     // 使用 at() 方法访问
    std::map<std::string, int> mymap1 = {
        {"alpha", 0}, {"beta", 0}, {"gamma", 0}};

    mymap1 .at("alpha") = 10;
    mymap1 .at("beta") = 20;
    mymap1 .at("gamma") = 30;

    for (auto& x : mymap1 ) {
        std::cout << x.first << ": " << x.second << '\n';
    }

   // 使用insert()插入元素
    std::map<char, int> mymap2;

    // 插入单个值
    mymap2.insert(std::pair<char, int>('a', 100));
    mymap2.insert(std::pair<char, int>('z', 200));
    mymap2.insert(std::make_pair('f', 300));    // pair方式和make_pair功能是一样的

   // erase() 删除元素
    map<int, int> mymap;
    for (int i = 0; i < 20; i++) {
        mymap.insert(make_pair(i, i));
    }
    mymap.erase(0);              // (1)删除key为0的元素
    mymap.erase(mymap.begin());  // (2)删除迭代器指向的位置元素
    map<int, int>::iterator it;
    for (it = mymap.begin(); it != mymap.end(); it++) {
        cout << it->first << "==>" << it->second << endl;
    }

    return 0;
}

其他函数

count(k) 查找关键字k出现的次数
find(k) 查找元素

    if (mp.count(0)) {
        cout << "yes!" << endl;
    } else {
        cout << "no!" << endl;
    }

    map<int, int>::iterator it_find;
    it_find = mp.find(0);
    if (it_find != mp.end()) {
        it_find->second = 20;
    } else {
        cout << "no!" << endl;
    }

empty() 容器是否为空
clear() 清空容器
size() 容器的大小
begin() 返回指向map头部的迭代器
end() 返回指向map末尾的迭代器
rbegin() 返回一个指向map尾部的逆向迭代器
rend() 返回一个指向map头部的逆向迭代器

相关文章

网友评论

      本文标题:C++ 容器的简单使用

      本文链接:https://www.haomeiwen.com/subject/vyakahtx.html