当前位置: 首页 > wzjs >正文

设计找图网站制作一个网站的流程有哪些

设计找图网站,制作一个网站的流程有哪些,最近军事新闻,韩国网站域名C 标准库提供了多种容器,用于存储和管理数据集合。容器分为三大类:序列容器、关联容器和无序关联容器。每类容器有不同的特性和适用场景,下面从时间复杂度、空间复杂度和作用三个方面进行详细讲解,并附代码示例: 一、序…

        C++ 标准库提供了多种容器,用于存储和管理数据集合。容器分为三大类:序列容器关联容器无序关联容器。每类容器有不同的特性和适用场景,下面从时间复杂度、空间复杂度和作用三个方面进行详细讲解,并附代码示例:


一、序列容器(Sequence Containers)

        序列容器按线性顺序存储元素,允许指定插入位置。共有 6 种标准序列容器(严格分类),但若包括容器适配器(如 stack 和 queue),则可能达到 8 种。

1. vector(动态数组)

  • 作用:动态数组,支持快速随机访问。

  • 时间复杂度

    • 尾部插入/删除:均摊 O(1)

    • 中间插入/删除:O(n)

    • 随机访问:O(1)

  • 空间复杂度:连续内存,预分配空间。

  • 示例

    #include <vector>
    std::vector<int> v = {1, 2, 3};
    v.push_back(4);       // 尾部插入
    int val = v[2];       // 随机访问

2. deque(双端队列)

  • 作用:双端队列,支持头尾快速插入。

  • 时间复杂度

    • 头尾插入/删除:O(1)

    • 中间插入/删除:O(n)

    • 随机访问:O(1)

  • 空间复杂度:分块存储,内存非连续。

  • 示例

    #include <deque>
    std::deque<int> d = {2, 3};
    d.push_front(1);      // 头部插入
    d.push_back(4);       // 尾部插入

3. list(双链表)

  • 作用:双向链表,支持任意位置快速插入。

  • 时间复杂度

    • 插入/删除:O(1)

    • 随机访问:O(n)

  • 空间复杂度:每个元素含前后指针。

  • 示例

    #include <list>
    std::list<int> l = {1, 3};
    auto it = l.begin();
    it++;
    l.insert(it, 2);     // 在第二个位置插入

4. forward_list(单链表)

  • 作用:单向链表,更节省内存。

  • 时间复杂度

    • 插入/删除:O(1)

    • 随机访问:O(n)

  • 空间复杂度:每个元素含单个指针。

  • 示例

    #include <forward_list>
    std::forward_list<int> fl = {2, 3};
    fl.push_front(1);     // 只能头部插入

5. array(静态数组)

  • 作用:固定大小数组,替代原生数组。

  • 时间复杂度

    • 插入/删除:不支持

    • 随机访问:O(1)

  • 空间复杂度:栈或静态内存分配。

  • 示例

    #include <array>
    std::array<int, 3> arr = {1, 2, 3};
    int val = arr.at(1);  // 安全访问

6. string(字符串动态数组)

  • 作用:专为字符串设计的动态数组。

  • 特性:类似 vector<char>,但支持字符串操作。

  • 示例

    #include <string>
    std::string s = "Hello";
    s += " World!";

二、容器适配器(Container Adapters)

容器适配器是对标准容器的封装,提供特定的接口和行为。使用序列容器,可以实现容器适配器。

栈(stack

1. 时间复杂度

  • 插入(pushO(1)

    • 在栈顶插入元素,直接添加到容器尾部。

  • 删除(popO(1)

    • 从栈顶删除元素,直接移除容器尾部元素。

  • 访问栈顶(topO(1)

    • 直接访问容器尾部元素。

2. 空间复杂度

  • 空间占用O(n)

    • 栈的空间占用取决于存储的元素数量。

  • 底层容器:默认使用 deque,也可以使用 vector 或 list

3. 适用场景

  • 需要后进先出(LIFO)行为的场景,如:

    • 函数调用栈(递归)。

    • 表达式求值(如括号匹配)。

    • 撤销操作(如编辑器中的撤销功能)。

4. 代码示例

#include <stack>
std::stack<int> s;
s.push(1);  // O(1)
s.push(2);  // O(1)
std::cout << s.top(); // 输出 2, O(1)
s.pop();    // O(1)
std::cout << s.top(); // 输出 1, O(1)

队列(queue

1. 时间复杂度

  • 插入(pushO(1)

    • 在队尾插入元素,直接添加到容器尾部。

  • 删除(popO(1)

    • 从队首删除元素,直接移除容器头部元素。

  • 访问队首(frontO(1)

    • 直接访问容器头部元素。

2. 空间复杂度

  • 空间占用O(n)

    • 队列的空间占用取决于存储的元素数量。

  • 底层容器:默认使用 deque,也可以使用 list

3. 适用场景

  • 需要先进先出(FIFO)行为的场景,如:

    • 任务调度(如打印任务队列)。

    • 消息队列(如事件处理系统)。

    • 广度优先搜索(BFS)算法。

4. 代码示例

#include <queue>
std::queue<int> q;
q.push(1);  // O(1)
q.push(2);  // O(1)
std::cout << q.front(); // 输出 1, O(1)
q.pop();    // O(1)
std::cout << q.front(); // 输出 2, O(1)

优先队列(priority_queue

1. 时间复杂度

  • 插入(pushO(log n)

    • 插入元素并调整堆结构。

  • 删除(popO(log n)

    • 删除堆顶元素并调整堆结构。

  • 访问堆顶(topO(1)

    • 直接访问堆顶元素。

2. 空间复杂度

  • 空间占用O(n)

    • 优先队列的空间占用取决于存储的元素数量。

  • 底层容器:默认使用 vector,也可以使用 deque

3. 适用场景

  • 需要动态获取最大或最小元素的场景,如:

    • 任务调度(按优先级处理任务)。

    • 最小生成树算法(如 Prim 算法)。

    • 最短路径算法(如 Dijkstra 算法)。

4. 代码示例

#include <queue>
std::priority_queue<int> pq;
pq.push(3);  // O(log n)
pq.push(1);  // O(log n)
pq.push(4);  // O(log n)
std::cout << pq.top(); // 输出 4, O(1)
pq.pop();    // O(log n)
std::cout << pq.top(); // 输出 3, O(1)

总结对比

容器适配器插入时间复杂度删除时间复杂度访问时间复杂度空间复杂度底层容器适用场景
栈 (stack)O(1)O(1)O(1)O(n)deque后进先出(LIFO)场景
队列 (queue)O(1)O(1)O(1)O(n)deque先进先出(FIFO)场景
优先队列 (priority_queue)O(log n)O(log n)O(1)O(n)vector动态获取最大/最小元素场景

三、关联容器(Associative Containers)

关联容器基于红黑树实现,元素按键有序存储,共有 4 种

1. set

  • 作用:有序唯一键集合。

  • 时间复杂度:插入/删除/查找 O(log n)

  • 示例

    #include <set>
    std::set<int> s = {3, 1, 2};
    s.insert(4);
    bool exists = s.count(2); // 返回 1

2. map

  • 作用:键值对集合,键唯一。

  • 时间复杂度O(log n)

  • 示例

    #include <map>
    std::map<std::string, int> m;
    m["apple"] = 5;
    m.insert({"banana", 3});

3. multiset

  • 作用:允许重复键的有序集合。

  • 示例

    std::multiset<int> ms = {1, 1, 2};
    ms.insert(1);

4. multimap

  • 作用:允许重复键的键值对集合。

  • 示例

    std::multimap<std::string, int> mm;
    mm.insert({"apple", 1});
    mm.insert({"apple", 2});

四、无序关联容器(Unordered Associative Containers)

无序容器基于哈希表实现,元素无序,共有 4 种

1. unordered_set

  • 作用:唯一键的无序集合。

  • 时间复杂度:平均 O(1),最坏 O(n)

  • 示例

    #include <unordered_set>
    std::unordered_set<int> us = {3, 1, 2};
    us.insert(4);

2. unordered_map

  • 作用:键值对的无序集合。

  • 示例

    #include <unordered_map>
    std::unordered_map<std::string, int> um;
    um["apple"] = 5;
    um["banana"] = 3;

3. unordered_multiset 和 unordered_multimap

  • 作用:允许重复键的无序集合/映射。

  • 示例

    std::unordered_multiset<int> ums = {1, 1, 2};
    std::unordered_multimap<std::string, int> umm;
    umm.insert({"apple", 1});
    umm.insert({"apple", 2});

总结

  • 序列容器:适用于需要保留插入顺序的场景(如 vector 用于快速随机访问,list 用于频繁插入)。

  • 关联容器:适用于需要有序遍历的场景(如按顺序处理数据)。

  • 无序关联容器:适用于快速查找且不关心顺序的场景(如缓存、字典)。

http://www.dtcms.com/wzjs/171739.html

相关文章:

  • 张家口建设网站长沙靠谱关键词优化服务
  • 沂南建设局网站百度提交入口网址
  • 施工企业如何获取竞争优势seo优化的优点
  • 怎么做直播网站刷弹幕推广一次多少钱
  • 宿舍网站建设目的超云seo优化
  • anaconda可以做网站吗深圳搜索优化排名
  • 服务网站建设企业大连最好的做网站的公司
  • 六安品牌网站建设电话昆明装饰企业网络推广
  • 服装公司网站设计推销产品的软文500字
  • 怎么在中国移动做网站备案百度竞价账户
  • 安徽省工程建设监管和信用管理网网站优化关键词排名公司
  • 余姚市住房和城乡建设局网站福州seo优化排名推广
  • 摄影网页模板河北seo技术
  • 微信公众号的微网站怎么做的seo标题优化关键词
  • 许昌网站建设seo专业培训学费多少钱
  • 做网站的税是多少网络整合营销公司
  • iis端口相同不同网站建设营销网络推广
  • 企业网站制作开发代哥seo
  • b2b网站排行榜百度推广有哪些售后服务
  • zblog还是wordpress百度seo排名优化软件
  • 深圳网站建设美橙互联东莞市网络营销公司
  • 唐山做企业网站公司今天全国31个省疫情最新消息
  • 有没有可以做网站动图的软件营销型网站建设费用
  • 佛山新网站建设咨询镇江seo优化
  • 网站建设客源开发企业官网
  • wordpress 客户端url百度搜索关键词排名优化推广
  • ftp备份网站河南推广网站
  • 上海正规做网站公司电话阳西网站seo
  • 刘涛做的婴儿玩具网站深圳竞价排名网络推广
  • 塘沽企业网站建设西安百度推广电话