vector用法
C++中的一种数据结构,确切的说是一个类.它相当于一个动态的数组。
vector基本用法:
#include<vector>//头文件
using namespace std;//命名空间
vector<int> Vec;//函数调用
int a;
cin>>a;
Vec.push_back(a);//在尾部加入一个数据a
Vec.pop_back();//删除最后一个数据。
int len=Vec.size();//获取长度
vector常见用法
使用元素
一般使用
Vec[1]; // 使用下标方式(避免使用)
Vec.at(1); // 使用at方式(建议使用)
Vec.front(); // 使用第一个元素
Vec.back(); // 使用最后一个元素
迭代器指针使用:
iterator begin(); // 返回向量头指针,指向第一个元素
iterator end(); // 返回向量尾指针,指向向量最后一个元素的下一个位置
vector<int>::iterator d = vec1.begin();
int d1 = *d;//vec1[0]
vector<int>::iterator e = vec1.end() - 1;
int e1 = *e;//vec1[last]`
增加元素:
vec1.push_back(x); // 在vec1的尾部添加一个元素x(注意:一般可以用emplace_back()代替,效率更高)
vec1.insert(iterator iter, x); // 在vec1的迭代器iter指向元素前增加一个元素x
vec1.insert(iterator iter, int n, x); // 在vec1的迭代器iter指向元素前增加n个元素x
vec1.insert(iterator iter, const_iterator first,const_iterator last); // 在vec1的迭代器iter指向元素前插入另一个相同类型向量的[first, last]间的数据
删除元素:
vec1.pop_back(); // 删除在vec1的最后一个元素
vec1.clear(); // 删除vec1中所有元素
vec1.erase(iterator iter); // 删除vec1中迭代器指向元素
vec1.erase(iterator first,iterator last); // 删除vec1中[first,last]中元素
判断是否为空:
bool empty() const:判断向量是否为空,若为空,则向量中无元素
vector<int> vec1 = { 1, 2, 3, 4, 5 };
bool i = vec1.empty();//输出:false
vector<int> vec2 = { };
bool j = vec2.empty();//输出:true
vector技巧用法
一维数组去重:
sort(p.begin(),p.end());
p.erase(unique(p.begin(), p.end()), p.end());
unique函数:
头文件:#include<algorithm>
作用: 去除容器或数组中相邻的重复元素(所以在使用之前要先sort)
说明: 这里的去除是指:将重复的元素放到容器的末尾,返回值是去重之后的尾地址。
实战1 B - Unexpressed
AtCoder - abc193_c
题意:
给定一个数a,求出1~a之间不是某个数的次方的数的个数。
思路:
暴力,记录能表示成某个数次方的数,然后去重复,得到去重复后的数组长度,用a-size就是题目所求
代码:
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const ll N=1e10+2;
ll n;
vector<ll> ans;
ll len;
int main()
{
cin>>n;
for(ll i=2;i<=sqrt(n);i++)
{
ll t=i*i;
while(t<=n)
{
ans.push_back(t);
t*=i;
}
}
sort(ans.begin(),ans.end());
ans.erase(unique(ans.begin(),ans.end()),ans.end());
len=ans.size();
cout<<n-len<<endl;
return 0;
}