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

wordpress issingle关键词优化靠谱推荐

wordpress issingle,关键词优化靠谱推荐,wordpress搬家中文图片,网页游戏排行榜开服时间一、介绍 1. vector是表示可变大小数组的序列容器,就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素 进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的&#xff0…

一、介绍

1. vector是表示可变大小数组的序列容器,就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素 进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自动处理。

原先数组的本质也是对一个个整形进行数据管理,可以想象成一个表格,由于需要管理的数据比起单个整形,现实情况更加的复杂和庞大,因此其作用也需要扩大,可以将其想象成一个笔记本,被开一个空间则表示笔记本有多少页,统一管理一个相同类型的数据,当然如果系统更为复杂的情况,则可以往更大的系统去想象

2.本质讲,vector使用动态分配数组来存储它的元素。当新元素插入时候,这个数组需要被重新分配大小为了增加存储空间。其做法是,分配一个新的数组,然后将全部元素移到这个数组。就时间而言,这是 一个相对代价高的任务,因为每当一个新的元素加入到容器的时候,vector并不会每次都重新分配大小。

3.vector分配空间策略:vector会分配一些额外的空间以适应可能的增长,因为存储空间比实际需要的存 储空间更大。不同的库采用不同的策略权衡空间的使用和重新分配。但是无论如何,重新分配都应该是 对数增长的间隔大小,以至于在末尾插入一个元素的时候是在常数时间的复杂度完成的。因此,vector占用了更多的存储空间,为了获得管理存储空间的能力,并且以一种有效的方式动态增 长。与其它动态序列容器相比(deque, list and forward_list), vector在访问元素的时候更加高效,在末 尾添加和删除元素相对高效。对于其它不在末尾的删除和插入操作,效率更低。比起list和forward_list 统一的迭代器和引用更好。

二、常见接口及其使用

1.vector的定义

构造函数声明接口说明
vector()无参构造
vector(size_type n, const value_type& val = value_type())构造并初始化n个val
vector (InputIterator first, InputIterator last)用迭代器初始化
vector (const vector& x)拷贝构造
    vector<int> first;                                // empty vector of intsvector<int> second(4, 100);                       // four ints with value 100vector<int> third(second.begin(), second.end());  // iterating through secondvector<int> fourth(third);                       // a copy of third

2.vector iterator的使用

iterator的使用接口说明
begin+endbegin获取第一个数据位置的iterator,end获取最后一个数据下一个位置的iterator
rbegin+endrbegin获取最后一个数据位置的reverse_iterator,end获取第一个数据前一个位置的reserve_iterator
void PrintVector(const vector<int>& v)
{// const对象使用const迭代器进行遍历打印vector<int>::const_iterator it = v.begin();while (it != v.end()){cout << *it << " ";++it;}cout << endl;
}

迭代器失效问题

对于vector可能会导致其迭代器失效的操作有:

1. 会引起其底层空间改变的操作,都有可能是迭代器失效,比如:resize、reserve、insert、assign、 push_back等。

2. 指定位置元素的删除操作--erase,删除操作在vs编译器认为,一旦执行,则原有迭代器视为失效
3. 与vector类似,string在插入+扩容操作+erase之后,迭代器也会失效。

迭代器失效解决办法:在使用前,对迭代器重新赋值即可。

3.vector空间管理接口

容量空间接口说明
size获取数据个数
capacity获取容量大小
empty判断是否为空

resize

改变vector的size,必要时会扩容,但不会缩容
reserve改变vector的capacity的大小,必要是会扩容,一般不缩容

4.vector的增删查改

增删查改接口说明
push_back尾插
pop_back尾删
find

查找(vector接口内没有自带的查找接口,需要时常用算法模块的查找功能),传参传迭代器,找到返回对应迭代器位置,找不到返回end的位置

insert在pos之前插入val值
erase删除pos位置的数据
swap交换两个vector的数据空间
operator[ ]像数组一样访问
void TestVector5()
{// 使用列表方式初始化,C++11新语法vector<int> v{ 1, 2, 3, 4 };// 在指定位置前插入值为val的元素,比如:3之前插入30,如果没有则不插入// 1. 先使用find查找3所在位置// 注意:vector没有提供find方法,如果要查找只能使用STL提供的全局findauto pos = find(v.begin(), v.end(), 3);if (pos != v.end()){// 2. 在pos位置之前插入30v.insert(pos, 30);}vector<int>::iterator it = v.begin();while (it != v.end()) {cout << *it << " ";++it;}cout << endl;pos = find(v.begin(), v.end(), 3);// 删除pos位置的数据v.erase(pos);it = v.begin();while (it != v.end()) {cout << *it << " ";++it;}cout << endl;
}// operator[]+index 和 C++11中vector的新式for+auto的遍历
// vector使用这两种遍历方式是比较便捷的。

三、相关的OJ题

1.只出现一次的数字(一)

题目链接:

​​​​​​力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

题目描述:

在一组数字中,除了一个数字是单独出现的,其余都是成双出现的,要求找到那个单独的数字。

解题思路:

全部异或一起就能找到那个数字

参考代码:

class Solution {
public:int singleNumber(vector<int>& nums) {int ret = 0;for(auto ch: nums){ret^=ch;}return ret;}
};

2.杨辉三角

题目链接:

118. 杨辉三角 - 力扣(LeetCode)

题目描述:

给一个数字表示杨辉三角的层级数,需要返回一个类似于二维数组的结构去表示杨辉三角

解题思路:

首先先构造出杨辉三角的结构,可以用vector<vector>类型去初始化出相应的结构,然后在对数据进行处理

代码参考:

class Solution {
public:vector<vector<int>> generate(int numRows) {vector<vector<int>> vvi;vvi.resize(numRows);for(int i = 0;i<vvi.size();i++){vvi[i].resize(i+1,0);vvi[i][0] = vvi[i][i] = 1;}for(int i = 0;i<vvi.size();i++){for(int j = 0;j<vvi[i].size();j++){if(vvi[i][j] == 0){vvi[i][j] = vvi[i-1][j-1] + vvi[i-1][j];                    }}}return vvi;}
};

3.电话号码字母组合

题目链接:

17. 电话号码的字母组合 - 力扣(LeetCode)

题目描述:

数字“2-9”对应着一串字母,题目给定一串数字字符串,要求得到对应字母的全排列组合

解题思路:

这里画出部分逻辑,将数字先转化成字母串,对字母串每一个都单独往下递归,将递归至最后一层的结果记录下来,最终将所有组合完成递归后结束。

参考代码:

class Solution 
{string num_let[10] = {"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
public://递归的参数设计上,第一个参数是数字字符,第二个di是用于在递归过程中控制字母字符是第几层的参数//第三个参数是用于在递归过程中记录下每次完成一次排列后的结果,第四个参数则是每次完成单趟排列后,统一存起来,用于返回的//因此,第一个参数和第四个参数采用的是传引用void letterCom(string& s_num,int di,string tmp,vector<string>& ret){if(di == s_num.size())//递归的结束条件,结束时将单次排列的结果存到ret中{ret.push_back(tmp);return;}//先将每一层对应的字母串取出来int num = s_num[di] - '0';string s_letter= num_let[num];//每一个都逐一向下递归for(auto ch: s_letter){letterCom(s_num,di+1,tmp+ch,ret);}}vector<string> letterCombinations(string digits) {vector<string> ret;//用于存放返回的结果if(digits == "")//这里是考虑到空数字字符,则直接返回空{return ret;}letterCom(digits,0,"",ret);//递归的参数不止一个digits,因此要单独用一个函数实现递归return ret;}
};

总结

本篇对vector的常用接口进行了整理介绍,并且整理了相关的OJ题,用于练习熟悉vector的使用。

http://www.hrbkazy.com/news/8947.html

相关文章:

  • 武汉光谷在哪个区赣州网站seo
  • html5网站多少钱产品营销方案
  • 传销网站建设陕西百度推广的代理商
  • 已认证网站服务费怎么做搜索引擎名词解释
  • 怎么看网站是哪里做的今日新闻大事
  • 深圳在哪些网站上面做推广怎么制作网站教程步骤
  • 网站建设朋友圈广告网络优化工具app手机版
  • 昆山靠谱的网站建设公司aso优化什么意思是
  • 长春做网站公司哪家好短视频营销推广
  • 免费空间做淘宝客网站太原seo服务
  • 网站大图分辨率做多大网店运营流程步骤
  • 用什么软件做商务网站seo和sem的区别是什么
  • 沈阳 建设工程 招标中心网站seo关键词快速排名介绍
  • 关停网站的申请结构优化设计
  • 做网站分什么软件四川网络推广seo
  • 网站建设套餐报晋城seo
  • 贸易公司网站模板女教师遭网课入侵直播录屏曝光8
  • 服务器512m内存做网站批量关键词排名查询工具
  • 网站上实用的h5特效怎么优化自己网站的关键词
  • 网站如何优化关键词排名哪个公司网站设计好
  • 网站建设费用会计入什么费用今日热搜头条
  • 网站建设怎么选择MySQL数据库大小网站制作的基本流程是什么
  • 做淘宝货源批发的网站百度开放云平台
  • 网页无法访问 wordpressseo基础篇
  • 数据分析案例网站平台交易网
  • 济南建网站价格网站推广的全过程
  • 怎么样建立学校网站网络营销的作用
  • 南京网站做的好的公司seo描述是什么
  • eclipse做企业网站长尾词挖掘
  • 做网站要偶数网站收录优化