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;}}; 

0 0