C++学习(0)之vector
来源:互联网 发布:淘宝和京东 编辑:程序博客网 时间:2024/06/15 19:57
C++小白在学习leetcode时遇到的问题
vector是什么?
vector是一种包含相同数据类型的对象的一种容器(或集合,是一种标准库)。vector对象能高效增长。
1、vector创建
vector<数据类型> v1(v1为对象名称)。
例如:vector<int> v1;
vector<string> V1;
vector<Rect> V1;//假设Rect是一种定义的结构体。
2、vector相关函数
可以在vector创建时对其初始化,也可以在运行时向其添加元素。
1)初始化vector
vector<int> v1(10,1);//表示该容器里有10个整型元素,每个元素被赋值为1;
vector<int> v1{1,2,2};//表示该容器里有3个整型元素,元素分别为1,2,2;
vector<string>v2(5,“abcdef”);//表示该容器里有5个string元素,每个元素被赋值为“abcdef”;
vector<string>v2{“abcdef”,“abcdef”};//表示该容器里有2个string元素,每个元素被赋值为“abcdef”;
2)向vector其中添加元素,尾部添加。
比如创建了vector<int>v;
v.push_back(a);//向vector中添加了元素a;
v.begin();//第一个元素
v.end();//最后一个元素的下一个位置
3)判断vector是否为空
v.empty();//如果v不含有任何元素,返回真;否则返回假。
4)vector大小
v.size();//返回v中元素的个数。
5)返回vector中元素的引用
v[n] ;//返回v中第n个位置上元素的引用
6)替换
v=v1;//用v1中元素的拷贝替换v中的元素;
v={a,b,c,.....};//用列表中的元素的拷贝替换v中的元素;
7)判断两个vector相等
v==v1;//只有当v和v1中所有的元素对应相等时,v和v1才相等。
8)比较
>、>=、<、<=;//按照字典顺序进行相应位置上的元素比较。
9)在vector中插入元素
v.insert(v.begin()+i,a);在第i+1个元素前面插入a
10)删除元素
v.erase(v.begin()+n);删除第n个元素
11)清空vector
v.clear()
12)排序
sort(vec.begin(),vec.end());//(默认是按升序排列,即从小到大).
相关题目(leetcode-cpp):
2.1.1 Remove Duplicates from Sorted Array
Given a sorted array, remove the duplicates in place such that each element appear only onceand return the new length.Do not allocate extra space for another array, you must do this in place with constant memory.
For example, Given input array A = [1,1,2],Your function should return length = 2, and A is now[1,2].
代码一、
// LeetCode, Remove Duplicates from Sorted Array
class Solution {public:int removeDuplicates(vector<int>& nums) {if (nums.empty()) return 0;int index = 0;for (int i = 1; i < nums.size(); i++) {if (nums[index] != nums[i])nums[++index] = nums[i];}return index + 1;}};
实现:
#include<iostream>#include<vector>using namespace std;class Solution{public:int removeDuplicates(vector<int>& nums){if(nums.empty()) return 0;int index = 0;for(int i = 1;i < nums.size();i++){if(nums[index] != nums[i])nums[++index] = nums[i];}return index + 1;}};int main(){Solution solution;int a[8] = {1,2,3,3,4,5,6,6};vector<int> va(a,a+8);for(int i = 0;i < va.size();i++)cout<<a[i]<<" ";cout<<endl;for(vector<int>::iterator it = va.begin();it != va.end();++it)cout<<*it<<" ";cout<<endl;int b = solution.removeDuplicates(va);for(vector<int>::iterator it = va.begin();it != va.end();++it)cout<<*it<<" ";cout<<endl;cout<<b;return 0;}运行后:
1 2 3 3 4 5 6 6 1 2 3 3 4 5 6 6 1 2 3 4 5 6 6 6 6实际上,上述代码并没有实现题目所要求的功能。
修改如下:
#include<iostream>#include<vector>using namespace std;class Solution{public:int removeDuplicates(vector<int>& nums){if(nums.empty()) return 0;int index = 0;for(int i = 1;i < nums.size();i++){if(nums[index] != nums[i])nums[++index] = nums[i];else {nums.erase(nums.begin()+index);--i;}}return index + 1;}};int main(){Solution solution;int a[8] = {1,2,3,3,4,5,6,6};vector<int> va(a,a+8);for(int i = 0;i < va.size();i++)cout<<a[i]<<" ";cout<<endl;for(vector<int>::iterator it = va.begin();it != va.end();++it)cout<<*it<<" ";cout<<endl;int b = solution.removeDuplicates(va);for(vector<int>::iterator it = va.begin();it != va.end();++it)cout<<*it<<" ";cout<<endl;cout<<b<<endl;return 0;}运行后:
1 2 3 3 4 5 6 6 1 2 3 3 4 5 6 6 1 2 3 4 5 6 6
代码二、
// LeetCode, Remove Duplicates from Sorted Array
class Solution {public:int removeDuplicates(vector<int>& nums) {return distance(nums.begin(), unique(nums.begin(), nums.end()));}};
代码三、
//LeetCode, Remove Duplicates from Sorted Array
class Solution {public:int removeDuplicates(vector<int>& nums) {return distance(nums.begin(), removeDuplicates(nums.begin(), nums.end(), nums.beg}template<typename InIt, typename OutIt>OutIt removeDuplicates(InIt first, InIt last, OutIt output) {while (first != last) {*output++ = *first;first = upper_bound(first, last, *first);}return output;}};
- C++学习(0)之vector
- 初学者学习C++STL之vector容器
- C++STL学习(1)容器vector
- C++vector学习笔记
- c++vector学习
- C++(18):STL之vector初步
- C++STL之vector详解(转)
- c++primer之vector
- c++STL之vector
- C++STL之vector
- C++STL之vector
- C++STL之vector
- c++primer学习之路(4)——string和vector
- C++STL库学习之向量容器vector & string容器
- STL学习之vector(1)
- STL学习之路三(vector)
- STL学习之vector
- STL学习之Vector
- rpm 查询安装包
- 百川云旺客服申请测试流程
- 工作记录
- 扩大tomcat内存
- javaScript高级特性(类比JAVA理解javaScript)
- C++学习(0)之vector
- c++ 设计模式之外观模式
- 解决android:background背景图片被拉伸问题
- CF 219D Choosing Capital for Treeland 树形DP
- Java源码分析01_Integer
- Servlet处理转发和重定向
- 事务管理总结
- MySQL索引背后的数据结构及算法原理
- ng2环境配置