IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> c++容器和函数对象(仿函数) -> 正文阅读

[系统运维]c++容器和函数对象(仿函数)

vector、set、map容器

vector和set的声明和遍历

vector的嵌套,大vector中嵌套多个小vector

#include <iostream>
#include <vector>

using namespace std;

void test1() {
    vector<vector<int> > vec;
    vector<int> v1;
    vector<int> v2;
    vector<int> v3;
    for (int i = 0; i < 4; i++) {
        v1.push_back(i + 1);
        v2.push_back(i + 2);
        v3.push_back(i + 3);
    }
    vec.push_back(v1); // 将三个vector容器放入一个大vector容器中
    vec.push_back(v2);
    vec.push_back(v3);
    // 遍历嵌套容器
//    for (vector<vector<int> >::iterator it = vec.begin(); it < vec.end(); it++) {
//        for (vector<int>::iterator vit = (*it).begin(); vit < (*it).end(); vit++) { // *it只解引用出的小容器
//            cout << (*vit) << " ";
//        }
//        cout << endl;
//    }
    // 使用auto也可实现遍历
    for (auto it = vec.begin(); it < vec.end(); it++) {
        for (auto vit = (*it).begin(); vit < (*it).end(); vit++) { // *it只解引用出的小容器
            cout << (*vit) << " ";
        }
        cout << endl;
    }
}

int main() {
    test1();
    return 0;
}

map的声明和遍历

#include <iostream>
#include <set>
#include <map>

using namespace std;

//class MyCompare {
//public:
//    bool operator()(int v1, int v2) {
//        return v1>v2;
//    }
//};

// 传入指针也可!打印map下的数据
void printMap(map<int, int> *map1) {
    for (map<int, int>::iterator it = map1->begin(); it != map1->end(); it++) {
        cout << "key:" << (*it).first << " value:" << (*it).second << endl;
    }
}

//void printMap2(map<int, int,MyCompare> *mapn) {
//    for (map<int, int, MyCompare>::iterator it = mapn->begin(); it != mapn->end(); it++) {
//        cout << "key:" << (*it).first << " value:" << (*it).second << endl;
//    }
//}

int main() {
    // set
    set<int> s;
    s.insert(20);
    s.insert(10);
    s.insert(40);
    s.insert(30);

    pair<set<int>::iterator, bool> ret = s.insert(10);
    if (ret.second) {
        cout << "successful!" << endl;
        return 0;
    }
    cout << "fail" << endl;

    // map
    map<int, int> map1;
    map1.insert(pair<int, int>(1, 666));
    map1.insert(make_pair(2, 777)); // 这样也可制造对组
    map1.insert(make_pair(3, 888));

    printf("------------\n");
    printMap(&map1);
    printf("------------\n");
    map<int, int>::iterator pos = map1.find(1);
    if (pos != map1.end()) {
        cout << "key为" << pos->first << " value为" << pos->second << endl;
//        return 0;
    } else {
        cout << "未找到该key对应的value" << endl;
    }
    printf("------------");

//    map<int, int, MyCompare> map2;
//    map2.insert(pair<int, int>(1, 666));
//    map2.insert(make_pair(2, 777)); // 这样也可制造对组
//    map2.insert(make_pair(3, 888));
    printMap2(&map2);
//    for (map<int, int, MyCompare>::iterator it = map2.begin(); it != map2.end(); it++) {
//        cout << "key:" << (*it).first << " value:" << (*it).second << endl;
//    }
    return 0;
}

map仿函数(函数对象)

当给对象排序时,必须使用仿函数(即类)
bool operator()(int k1, int k2) const { // 仅根据key排序 return k1 > k2; }

#include <iostream>
#include <map>

using namespace std;

class MyCompare {
public:
    // 警告:这里不加const将运行报错!!!
    bool operator()(int k1, int k2) const { // 仅根据key排序
        return k1 > k2;
    }
};

int main() {

    map<int, int, MyCompare> map2;
    map2.insert(pair<int, int>(1, 666));
    map2.insert(make_pair(2, 999)); // 这样也可制造对组
    map2.insert(make_pair(3, 888));
//    printMap2(&map2);
    for (map<int, int, MyCompare>::iterator it = map2.begin(); it != map2.end(); it++) {
        cout << "key:" << (*it).first << " value:" << (*it).second << endl;
    }
    return 0;
}

函数对象的三种使用方式

#include <iostream>

using namespace std;

/**
 * 仿函数,函数对象,本质 类。
 */
class MyAdd {
public:
    int operator()(int a, int b) {
        return a + b;
    }
};

class MyPrint {
public:
    int count;

    MyPrint() {
        this->count = 0;
    }

    void operator()(string text) {
//        this->count++; // 阔以~
        count++;
        cout << text << endl;
    }
};

void test1() {
    MyAdd myAdd;
    int ret = myAdd(1, 2);
    cout << "ret:" << ret << endl;
}

void test2() {
    MyPrint myPrint;
    myPrint("lwt1");
    myPrint("lwt2");
    myPrint("lwt3");
    cout << "调用仿函数的次数:" << myPrint.count << endl;
}

void doPrint(MyPrint &mp,string text){
    mp(text);
}
void test3(){
    MyPrint myPrint;
    doPrint(myPrint,"void doPrint(MyPrint &mp,string text) lwt666");
}
int main() {
    test1();
    test2();
    test3();
    return 0;
}

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-11-27 10:18:21  更:2021-11-27 10:20:36 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 1:25:06-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码