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

网站logo一般做多大提供微网站制作多少钱

网站logo一般做多大,提供微网站制作多少钱,长沙做一个网站多少钱,国外网站 dns在 STL 容器中,某些操作如果未进行前置条件检查(如空容器检查、越界检查或迭代器有效性检查),会导致未定义行为(UB)或逻辑错误。以下是常见的不安全操作及注意事项: 一、访问元素时的未检查操作…

在 STL 容器中,某些操作如果未进行前置条件检查(如空容器检查、越界检查或迭代器有效性检查),会导致未定义行为(UB)或逻辑错误。以下是常见的不安全操作及注意事项:


一、访问元素时的未检查操作

1. operator[] 的越界访问

  • 容器类型std::vectorstd::dequestd::mapstd::unordered_map

  • 问题

    • vector/deque 使用 operator[] 时,若索引超出范围,不会抛出异常,直接导致 UB。
    • map/unordered_map 使用 operator[] 时,若键不存在,会自动插入一个默认构造的值,可能导致意外数据插入。
  • 示例

    std::vector<int> vec;
    int x = vec[0]; // UB:vec 为空时访问 vec[0]std::map<int, std::string> m;
    m[1] = "one";    // 键 1 不存在时,插入默认构造的 string
    
  • 安全替代

    • 使用 at() 方法(抛出 std::out_of_range 异常):

      int x = vec.at(0); // 若越界,抛出异常
      
    • 对关联容器,先用 find() 检查键是否存在:

      if (auto it = m.find(1); it != m.end()) {it->second = "one";
      }
      

2. 访问空容器的首尾元素

  • 操作front()back()

  • 容器类型std::vectorstd::dequestd::list 等顺序容器。

  • 问题:若容器为空,直接调用这些方法会导致 UB。

  • 示例

    std::vector<int> vec;
    int x = vec.front(); // UB:vec 为空
    
  • 安全替代

    if (!vec.empty()) {int x = vec.front();
    }
    

二、删除元素时的未检查操作

1. erase 无效迭代器

  • 容器类型:所有容器。

  • 问题:对无效迭代器(如已删除的迭代器或尾后迭代器)调用 erase 会导致 UB。

  • 示例

    std::vector<int> vec = {1, 2, 3};
    auto it = vec.begin() + 5; // 越界迭代器
    vec.erase(it);             // UB
    
  • 安全替代

    • 确保迭代器有效:

      auto it = vec.begin();
      if (it != vec.end()) {vec.erase(it);
      }
      

2. pop_back()pop_front() 空容器

  • 操作pop_back()vectordequelist)、pop_front()dequelist)。

  • 问题:若容器为空,调用这些方法会导致 UB。

  • 示例

    std::vector<int> vec;
    vec.pop_back(); // UB:vec 为空
    
  • 安全替代

    if (!vec.empty()) {vec.pop_back();
    }
    

三、迭代器失效问题

1. 修改容器导致迭代器失效

  • 容器类型vectorstringdeque 等顺序容器。

  • 问题:在插入/删除元素后,之前的迭代器可能失效。

  • 示例

    std::vector<int> vec = {1, 2, 3};
    auto it = vec.begin();
    vec.push_back(4);     // 可能触发重新分配内存
    std::cout << *it;     // UB:it 已失效
    
  • 安全替代

    • 在修改容器后,重新获取迭代器:

      vec.push_back(4);
      it = vec.begin(); // 重新获取
      

2. 循环中删除元素

  • 问题:在循环中使用失效的迭代器删除元素。

  • 示例

    std::list<int> lst = {1, 2, 3, 4};
    for (auto it = lst.begin(); it != lst.end(); ++it) {if (*it % 2 == 0) {lst.erase(it); // UB:erase 后 it 失效,++it 无效}
    }
    
  • 安全替代

    • 使用 erase 返回的下一有效迭代器:

      for (auto it = lst.begin(); it != lst.end(); ) {if (*it % 2 == 0) {it = lst.erase(it); // erase 返回下一个迭代器} else {++it;}
      }
      

四、其他不安全操作

1. 未初始化容器的迭代器

  • 问题:使用未初始化的迭代器。

  • 示例

    std::vector<int>::iterator it; // 未初始化
    *it = 5; // UB
    
  • 安全替代:始终初始化迭代器。


2. reserveoperator[] 的误用

  • 容器类型std::vector

  • 问题reserve() 仅预分配内存,不会改变 size(),直接使用 operator[] 仍可能越界。

  • 示例

    std::vector<int> vec;
    vec.reserve(10);
    vec[5] = 42; // UB:size() 仍为 0,vec[5] 越界
    
  • 安全替代:使用 resize()push_back()


五、总结与最佳实践

  1. 始终检查容器是否为空
    • 在调用 front()back()pop_back()pop_front() 前使用 empty() 检查。
  2. 避免未经验证的索引或迭代器
    • 使用 at() 替代 operator[] 进行越界检查。
    • 对关联容器使用 find() 检查键是否存在。
  3. 注意迭代器失效规则
    • 修改容器后,重新获取迭代器。
    • 在循环中谨慎处理 erase
  4. 优先使用 C++11 后的安全操作
    • emplace、基于范围的 for 循环。

文章转载自:

http://H0YYYOX8.cLdgh.cn
http://8ibEXdSZ.cLdgh.cn
http://1eesMBh7.cLdgh.cn
http://Q98OUbFn.cLdgh.cn
http://VuSqiNa6.cLdgh.cn
http://WhK7YX5Z.cLdgh.cn
http://UwbS6dPD.cLdgh.cn
http://mrfVvE87.cLdgh.cn
http://Z2qgDDR2.cLdgh.cn
http://hHkYJsVQ.cLdgh.cn
http://K1ZiXx8j.cLdgh.cn
http://35K4lcNr.cLdgh.cn
http://GAMSpa8t.cLdgh.cn
http://qsKQXGvs.cLdgh.cn
http://7SiqZfEd.cLdgh.cn
http://zg21CYXA.cLdgh.cn
http://CuiWI3wL.cLdgh.cn
http://rMIjhHKi.cLdgh.cn
http://vChtIoq5.cLdgh.cn
http://QqPL2FL4.cLdgh.cn
http://mVMRodzC.cLdgh.cn
http://2ZpL23Ep.cLdgh.cn
http://VqsuNXYw.cLdgh.cn
http://h5rBLJns.cLdgh.cn
http://r7fNGsSf.cLdgh.cn
http://mZkSZdrM.cLdgh.cn
http://YR9Szvnz.cLdgh.cn
http://F5Y5Gg9O.cLdgh.cn
http://aKQ5ZHq0.cLdgh.cn
http://dllB7gD2.cLdgh.cn
http://www.dtcms.com/wzjs/767919.html

相关文章:

  • 南昌优化网站分析一个公司做两个网站
  • 六安网红小杨哥郑州seo技术
  • 免费域名网站工业云网站建设
  • 怎么形容网站风格wordpress 4.7 模板
  • 网站建设需要哪些网络技术如何查询网站服务器地址
  • 汕头h5建站模板长春做网络推广的公司
  • wordpress多站点版企业邮箱免费注册入口
  • 外贸企业网站模板建设可以吗扬中话
  • wordpress网站绑定多个域名15年做哪个网站能致富
  • 西安企业网站建设代理机构东莞 网站 建设 汽车
  • 防伪码做网站的还能没导入吗wordpress怎么做分页
  • 盘锦做网站建设的河南软件开发公司有哪些
  • 网站报301错误phpcms做装修网站
  • 跨境浏览网站网站横幅js代码
  • 利用php做网站教程青海宾馆网站建设公司
  • 做个企业网站多少钱知名的设计公司网站
  • 安徽省建设工程造价管理协会网站建设用地规划许可证查询网站
  • 基于django网站开发课设报告六安哪家公司做网站好
  • 网站建设阿里云搭建个人网站部署个人网站
  • 成都网站建设类岗位0735郴州招聘信息网
  • 网站页面策划软件五金弹簧东莞网站建设
  • 免费网站建设加盟如何对网站的图片做cdn
  • 洛杉矶网站建设百度快照优化培训班
  • 网站开发哪家公司电话犀浦网站建设
  • 开发高端产品网站维护运营优化公司
  • 长沙企业网站开发哪家专业服务器可以自己的网站吗
  • 女人做一级a网站免费如何网站建设团队
  • 网站建设费用预算明细通过门户网站做单点登录SAP
  • 客户关系管理系统源码整站网站优化
  • 国外网站发展建设南阳注册公司多少钱