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

出国留学网站开发网站制作与管理技术标准实训教程

出国留学网站开发,网站制作与管理技术标准实训教程,介绍做网站的标题,外贸网站建站电话多少概览 std::vector是C标准模板库(STL)中的一种动态数组容器。它提供了一种类似于数组的数据结构#xff0c;但是具有动态大小和更安全的内存管理。 定义和基本特性 std::vector是C标准库中的一 个序列容器#xff0c;它代表了能够动态改变大小的数组。与普通数组一样#x…概览 std::vector是C标准模板库(STL)中的一种动态数组容器。它提供了一种类似于数组的数据结构但是具有动态大小和更安全的内存管理。 定义和基本特性 std::vector是C标准库中的一 个序列容器它代表了能够动态改变大小的数组。与普通数组一样向量使用连续的存储位置来存放其元素这使得可以通过指针偏移直接且高效地访问元素就像操作数组一样。然而与数组不同的是向量的大小可以动态变化其存储管理由容器自动处理。 在内部向量使用动态分配的数组来存储元素。为了适应增长这个数组可能需要重新分配空间这意味着创建一个新的数组并将所有元素移动到新位置。由于重新分配涉及大量的计算资源向量并不会在每次插入新元素时都重新分配内存。         相反向量容器可能会预先分配额外的空间以预留增长空间因此容器的实际容量可能大于严格包含其元素所需的大小。库可以采用不同的策略来平衡内存使用和重新分配但无论如何重新分配应该发生在对数增长间隔的大小上这样向量尾部插入单个元素的时间复杂度可以达到摊销常数时间如push_back。         与数组相比向量消耗更多的内存以此换取高效存储管理和动态扩展的能力。与其他动态序列容器如双端队列deque、链表list和前向链表forward_list相比向量在访问元素方面效率很高且在序列尾部添加或移除元素相对高效。但对于在序列非尾部位置插入或移除元素的操作向量表现不如其他容器而且其迭代器和引用的稳定性也不及链表和前向链表。         容器属性总结如下 - 序列性容器内的元素按严格的线性顺序排列可以通过它们的位置直接访问。 - 动态数组允许通过索引或指针算术直接访问任意元素并且在序列尾部添加或移除元素速度较快。 - 分配器感知容器使用分配器对象动态管理其存储需求这使得可以定制内存分配和释放的策略。 成员类型 常用的成员函数 Iterators: begin()返回指向向量开头的迭代器。end()返回指向向量结尾的迭代器。rbegin()返回指向倒序向量开头的反向迭代器。rend()返回指向倒序向量结尾的反向迭代器。cbegin()返回指向向量开头的常量迭代器。cend()返回指向向量结尾的常量迭代器。crbegin()返回指向倒序向量开头的常量反向迭代器。crend()返回指向倒序向量结尾的常量反向迭代器。 Capacity: size()返回向量的大小。max_size()返回最大可能的向量大小。resize()改变向量的大小。capacity()返回已分配的存储空间大小。empty()检查向量是否为空。reserve()请求改变容量。shrink_to_fit()缩小至适合实际大小。 Element access: operator[]访问元素。at()访问元素带越界检查。front()访问首元素。back()访问尾元素。data()访问数据返回指向元素数组的指针。 Modifiers: assign()分配向量内容。push_back()在末尾添加元素。pop_back()删除最后的元素。insert()插入元素。erase()删除元素。swap()交换内容。clear()清空内容。emplace()就地构造并插入元素。emplace_back()在末尾就地构造并插入元素。 // 创建一个向量 std::vectorint vec{1, 2, 3, 4, 5};// 遍历向量 for (auto it vec.begin(); it ! vec.end(); it) {std::cout *it ; }// 遍历倒序向量 for (auto rit vec.rbegin(); rit ! vec.rend(); rit) {std::cout *rit ; }// 使用常量迭代器遍历向量 for (auto cit vec.cbegin(); cit ! vec.cend(); cit) {std::cout *cit ; }// 使用常量反向迭代器遍历倒序向量 for (auto crit vec.crbegin(); crit ! vec.crend(); crit) {std::cout *crit ; } // 获取向量的大小 std::cout Size: vec.size() \n;// 获取向量的最大可能大小 std::cout Max Size: vec.max_size() \n;// 改变向量的大小 vec.resize(7);// 获取已分配的存储空间大小 std::cout Capacity: vec.capacity() \n;// 判断向量是否为空 if (vec.empty()) {std::cout Vector is empty\n; } else {std::cout Vector is not empty\n; }// 请求改变容量 vec.reserve(10);// 缩小至适合实际大小 vec.shrink_to_fit(); // 访问元素 int firstElement vec.front(); // 获取第一个元素 int lastElement vec.back(); // 获取最后一个元素 int secondElement vec[1]; // 使用下标访问第二个元素 int thirdElement vec.at(2); // 使用at()函数访问第三个元素带有越界检查// 直接访问数据 int* dataPtr vec.data(); // 分配向量内容 vec.assign({1, 2, 3});// 添加元素到末尾 vec.push_back(4);// 删除最后一个元素 vec.pop_back();// 插入元素 vec.insert(vec.begin(), 0);// 删除元素 vec.erase(vec.begin());// 交换内容 std::vectorint anotherVec{6, 7, 8}; vec.swap(anotherVec);// 清空内容 vec.clear();// 就地构造并插入元素 vec.emplace(vec.begin(), 10);// 在末尾就地构造并插入元素 vec.emplace_back(11); 值得注意的点 erase(): An iterator pointing to the new location of the element that followed the last element erased by the function call. This is the container end if the operation erased the last element in the sequence. Member type iterator is a random access iterator type that points to elements. 指向被函数删除的最后一个元素之后的元素的新位置的迭代器。如果操作擦除了序列中的最后一个元素这就是容器的结尾。 ​成员类型iterator是一个指向元素的随机访问迭代器类型。 当erase函数被调用来删除容器中的一个或多个元素时它会返回一个迭代器。这个迭代器指向紧随被删除元素后的新位置处的元素。如果erase操作删除的是容器中的最后一个元素那么返回的迭代器将指向容器的末尾即end()迭代器。         这里的iterator是容器定义的一种成员类型它是一种随机访问迭代器可以用来指向容器中的元素。随机访问迭代器意味着你可以使用诸如operator和operator-这样的运算符来在迭代器之间进行移动也可以使用operator[]来进行索引访问。 例如假设你有一个std::vectorint并使用erase删除了其中的几个元素那么你可以这样使用返回的迭代器 std::vectorint my_vector {1, 2, 3, 4, 5}; auto it my_vector.begin() 2; // 指向3 my_vector.erase(it); // 删除3// it现在指向4因为3被删除后4占据了3的位置 // 如果删除的是最后一个元素it将指向end() 在使用std::vector或其他STL容器的erase函数时有几个重要的注意事项以避免潜在的错误和未定义行为 1. 迭代器失效    当你调用erase函数时所有指向被删除元素及之后元素的迭代器都将失效。这是因为erase操作会将之后的元素向前移动以填补空位。因此你应该立即停止使用任何可能指向这些位置的迭代器并且在erase操作后任何依赖于这些迭代器的代码都可能产生错误。 2. 返回值的使用    erase函数返回一个迭代器指向紧随被删除元素之后的那个元素。如果删除的是容器的最后一个元素erase会返回end()迭代器。你应该利用这个返回值来更新你正在使用的迭代器以防止使用已失效的迭代器。 3. 范围检查    确保你正在删除的元素在容器的有效范围内。尝试删除超出容器范围的元素会导致未定义行为这通常表现为程序崩溃。 4. **性能考量**    在std::vector中erase操作在容器中间或开头的性能较差因为它需要移动大量元素。相比之下在容器末尾使用pop_back()删除元素通常更快因为它不需要移动任何元素。 5. 链式删除    如果你打算删除多个元素特别是连续的元素最好使用迭代器来跟踪删除操作后的新位置避免多次无效的迭代器更新。例如你可以在一个循环中使用erase并立即更新迭代器 for (auto it vec.begin(); it ! vec.end(); ) {if (someCondition(*it)) {it vec.erase(it);} else {it;}} 6. 并发访问    如果你的容器在多线程环境中被多个线程访问确保在调用erase时采取适当的同步措施以避免数据竞争和未定义行为。 遵循这些指导原则可以帮助你更安全、有效地使用erase函数。 insert(): 1. 插入单个元素    插入单个元素到std::vector的指定位置可以使用以下形式 vector_type::iterator insert(position_type position, const T value);    这里position是一个迭代器指向新元素应该插入的位置value是要插入的元素的值。 2. 插入范围    可以使用两个迭代器来表示一个范围从而插入一系列元素 iterator insert(position_type position, InputIterator first, InputIterator last);    其中first和last分别指定了要插入元素的范围。 3. 插入特定数量的相同元素    插入多个相同的元素 iterator insert(position_type position, size_type count, const T value);    这里count指定了要插入的元素的数量value则是要插入的元素的值。 注意事项 1. 迭代器失效    调用insert函数可能会使某些迭代器失效具体来说插入点之后的所有迭代器都会失效因为它们所指向的元素位置发生了变化。你需要在插入操作后重新获取正确的迭代器。 2. 容量调整    如果插入元素后容器的大小超过了其当前的容量insert操作可能会触发容器的重新分配resize这意味着容器的所有元素会被复制到一个新的内存位置上。这可能会影响性能特别是在频繁插入元素的情况下。 3. 返回值    insert函数返回一个迭代器指向刚刚插入的第一个元素。这在插入单个元素时尤其有用可以用来获取新元素的位置。 4. 效率考量    在std::vector中插入元素的效率取决于插入的位置。在容器的末尾插入元素是最高效的因为它只需要增加内部计数器而无需移动其他元素。而在容器的开头或中间插入元素则可能需要移动大量元素因此效率较低。 5. 异常安全性    insert函数提供强异常安全性保证即如果在插入过程中发生异常容器的状态将保持不变已经完成的插入不会被撤销也不会有额外的插入。 6. 初始化列表    C11 引入了初始化列表std::vector的insert函数也支持使用初始化列表插入一组元素   templateclass InputItiterator insert(const_iterator position, initializer_listT il); 遵循这些指导原则和注意事项可以更高效地使用insert函数来操作std::vector。 了解并正确使用std::vector可以显著提高C程序的开发效率和代码质量。
http://www.hkea.cn/news/14437617/

相关文章:

  • 管廊建设网站做网站赠送
  • 建立可以在线做照片的网站怎么推广微信公众号
  • 设计师常去网站网页制作初学者
  • 网站策划报告大连网站建设主页
  • 西安做网站公司xamokj移动互联网 传统网站
  • 深圳微商城网站制作公司站酷网logo
  • 手机上自己如何做网站广州专业的网站开发公司
  • 网站集约化建设工作打算外部网站 同意加载
  • 模版型网站做的网站显示不了背景图片
  • 网站建设咨询服务商wordpress 魔客
  • 北京迈程网络网站建设公司旅游网站设计与制作课程设计
  • 网站标题权重手机网站模板大全
  • 做网站价格多少钱室内装饰设计培训机构
  • 潍坊网站建设哪家专业设计平面图
  • 大数据对网站建设教育的影响计算机类十大含金量证书
  • 怎么做一种网站为别人宣传qq推广中心
  • 网站设计 网站开发 西安手工制作小汽车
  • wordpress首页模板是哪个安卓aso优化工具
  • 泰州市网站制作公司网页搭配
  • 网上做视频赚钱的网站自建网站 做自定义导航
  • 张家界网站建设泰安高端网站设计建设
  • 网站对联广告网站建设方案及报
  • 做网站语言知乎新会住房和城乡建设部网站
  • 精品课程网站的设计与建设要求重庆市工程建设标准化信息网
  • 山东省建设教育信息网站首页手机能建设网站吗
  • 网站推广的优势有哪些免费建站网站 百度一下
  • 东莞网站改版英文外贸网站
  • 长沙建站网站网页制作与设计考的在哪查房
  • 宝安做网站怎么样网站广告图片设计教程
  • 长沙哪家制作网站好动漫网页制作成品图片