vetor容器是C++中常用容器,可以用来代替数组
相较数组而言,vector能够更灵活的添加插入删除数据
//添加头文件<vector>
一、vector 的初始化
(1) vector<int> a(10);
//定义了10个整型元素的向量,但没有给出初值,其值是不确定的。
(2)vector<int> a(10,1);
//定义了10个整型元素的向量,且给出每个元素的初值为1
(3)vector<int> a(b);
//用b向量来创建a向量,整体复制性赋值
(4)vector<int> a(b.begin(),b.begin+3);
//定义了a值为b中第0个到第2个(共3个)元素
(5)int b[7]={1,2,3,4,5,9,8};
vector<int> a(b,b+7);
//从数组中获得初值
二、vector对象的几个重要操作
(1)a.assign(b.begin(), b.begin()+3); //b为向量,将b的0~2个元素构成的向量赋给a
(2)a.assign(4,2); //是a只含4个元素,且每个元素为2
(3)a.back(); //返回a的最后一个元素
(4)a.front(); //返回a的第一个元素
(5)a[i]; //返回a的第i个元素,当且仅当a[i]存在2013-12-07
(6)a.clear(); //清空a中的元素
(7)a.empty(); //判断a是否为空,空则返回ture,不空则返回false
(8)a.pop_back(); //删除a向量的最后一个元素
(9)a.erase(a.begin()+1,a.begin()+3); //删除a中第1个(从第0个算起)到第2个元素,也就是说删除的元素从a.begin()+1算起(包括它)一直到a.begin()+ 3(不包括它)
(10)a.push_back(5); //在a的最后一个向量后插入一个元素,其值为5
(11)a.insert(a.begin()+1,5); //在a的第1个元素(从第0个算起)的位置插入数值5,如a为1,2,3,4,插入元素后为1,5,2,3,4
(12)a.insert(a.begin()+1,3,5); //在a的第1个元素(从第0个算起)的位置插入3个数,其值都为5
(13)a.insert(a.begin()+1,b+3,b+6); //b为数组,在a的第1个元素(从第0个算起)的位置插入b的第3个元素到第5个元素(不包括b+6),如b为1,2,3,4,5,9,8 ,插入元素后为1,4,5,9,2,3,4,5,9,8
(14)a.size(); //返回a中元素的个数;
三、顺序访问vector的几种方式
(1)向向量a中添加元素
1、
1 vector<int> a;
2 for(int i=0;i<10;i++)
3 a.push_back(i);
2、也可以从数组中选择元素向向量中添加
int a[6]={1,2,3,4,5,6};
vector<int> b;
for(int i=1;i<=4;i++)
b.push_back(a[i]);
3、也可以从现有向量中选择元素向向量中添加
int a[6]={1,2,3,4,5,6};
vector<int> b;
vector<int> c(a,a+4);
for(vector<int>::iterator it=c.begin();it<c.end();it++)
b.push_back(*it);
4、也可以从文件中读取元素向向量中添加
ifstream in("data.txt");
vector<int> a;
for(int i; in>>i)
a.push_back(i);
5、【误区】
vector<int> a;
for(int i=0;i<10;i++)
a[i]=i;
//这种做法以及类似的做法都是错误的。刚开始我也犯过这种错误,后来发现,下标只能用于获取已存在的元素,而现在的a[i]还是空的对象
题目:
给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。
你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。
返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。
思路:
//第一种方法:
//两层循环,逐个遍历 找出差最大的
//第二种:
//找最大和最小,是否满足大的在前面小的在后面,不满足 两个分支1保最大2保最小 最后比较哪个差更大
不行! 必须兼顾
我的题解:
#include<iostream>
#include<vector>
#include<string.h>
using namespace std;
class Solution{
public:
int max(vector<int> price){
int i = 0 , j = 0 , max = 0 ;
for( ; i < price.size()-1 ; i++){
for( j = i+1 ; j < price.size() ; j++){
if(price[j] - price[i] > max)
max = price[j] - price[i] ;
}
}
return max;
}
};
int main(){
int p[6] = {7,1,5,3,6,4};
vector<int> price(p,p+6);
Solution s;
cout<<s.max(price);
}
其他巧解方法 :
class Solution {
public:
int maxProfit(vector<int>& prices) {
int inf = 1e9; //无穷大数
int minprice = inf, maxprofit = 0;
for (int price: prices) {
//与每一个价格之前的最小值做差,再与最大差比较
maxprofit = max(maxprofit, price - minprice);
minprice = min(price, minprice);
}
return maxprofit;
}
};