vector<typename> p 和vector<typename> *p

今天遇到这样一个问题,就是函数的一个参数类似这样的 vector<int> *p 。开始还觉得有点怪怪的。
其实是这边项目中有个代码规范,如果传引用,就要一定要使用const进行修饰,为了能够在函数类能够修改传入的东西
所以就传入了一个类似vector< int > *p的指针。

其实对与p中的元素访问有基本的两种

1.基于迭代器访问

这个很简单,就不写范例

2.基于下标的访问

比如访问第一元素可以写成这样

    std::cout<<(*p)[0]<<std::endl;

2、

为了符合上述的代码规范问题
有些代码写成这样,这里的代码是举得例子,实际还要遵守其他的代码规范

    using iSet = std::unordered_map<std::string, std::string>;
    iSet *p = new iSet();
    p->insert(std::make_pair("1","1"));
    std::cout<<(*p)["1"]<<std::endl;
    std::cout<<p->find("1")->second<<std::endl;
    delete p;

当然了也可以用智能指针

    using iSet = std::unordered_map<std::string, std::string>;

    std::shared_ptr<iSet> map_ptr = std::make_shared<iSet>();
    map_ptr->insert(std::make_pair("1","1"));
    std::cout<<(*map_ptr)["1"]<<std::endl;
    std::cout<<map_ptr->find("1")->second<<std::endl;

使用智能指针时别忘了头文件#include <memory>

posted @ 2020-08-11 11:59  cyssmile  阅读(187)  评论(0编辑  收藏  举报