绿色计算大赛--字符串反转
vector
简单介绍
1.vector是可变大小数组的序列容器。
2.其可以采用连续存储空间来存储元素。也就意味着可以采用下标对vector的元素进行访问,其和数组一样高效。和数组的区别就是它的大小可以改变,并且其大小会被容器自动处理。
3.vector的动态大小的形成是其在开始的时候就分配了多余的存储空间,用来应对可能发生的增长。
4.其每次在数组的末尾进行插入删除操作,所以其效率也是非常高的。
使用方法
1.头文件
#include<vector>
2.声明及初始化
vector<int>vec; //声明一个int型向量
vector<int>vec(5); //声明一个初始大小为5的int型向量
vector<int>vec(10,1); //声明一个初始大小为10且值都为1的int型向量
vector<int>vec(tmp); //声明并用tmp向量初始化vec向量
vector<int>tmp(vec.begin(),vec.begin()+3); //声明并用向量vec的第0-2个值初始化tmp向量
int arr[5] = {1, 2, 3, 4, 5};
vector<int> vec(arr, arr + 5); //将arr数组的元素用于初始化vec向量
//说明:当然不包括arr[4]元素,末尾指针都是指结束元素的下一个元素,
//这个主要是为了和vec.end()指针统一。
vector<int> vec(&arr[1], &arr[4]); //将arr[1]~arr[4]范围内的元素作为vec的初始值
基本操作
(1).容量
-
向量大小:vec.size();
-
向量最大是容量:vec.max_size();
-
更改向量的大小:vec.resize();
-
向量真实大小:vec.capacity();
-
向量判空:vec.empty();
-
减少向量大小到满足元素所占存储空间的大小:vec.shrink_to_fit();
(2).修改 -
多个元素赋值:vec.assign();//类似于初始化时用数组进行赋值
-
末尾添加元素:vec.push_back();
-
末未删除元素:vec.pop_back();
-
任意位置插入元素:vec.insert();
-
任意位置删除元素:vec.erase();
-
交换两个向量的元素:vec.swap();
-
清空向量的元素:vec.clear();
(3).迭代器 -
开始指针:vec.begin();
-
末尾指针:vec.end();//指向最后一元素的下一个元素
-
指向常量的开始指针:vec.cbegin();//不可以通过这个指针来修改所指的内容,但可以通过其他方式修改,而且指针可以移动。
-
指向常量的末尾指针:vec.cend();
(4).元素的访问 -
下标访问:vec{1};//并不会检查是否越界
-
at方法访问:vec.at(1);//以上两者的区别就是at会检查是否越界,是则抛出out of range异常
-
访问第一个元素:vec.front();
-
访问最后一个元素:vec.back();
-
返回一个指针:int *p = vec.data();//因为vector在内存中是一个连续存储的数组,所以可以返回一个指针指向这个数组。
(5).遍历数组 -
遍历元素
int a[5]={1,2,3,4,5};
vector<int>vec(&a[1],&a[4]);//初始化
vector<int>::iterator it;
for(it=vec.begin();it!=vec.end();it++)
cout<<*it<<endl;
for(size_t i = 0;i< vec.size();i++)
cout<<vec.at(i)<<endl;
- 元素翻转
int a[5]={1,2,3,4,5};
vector<int>vec(&a[1],&a[4]);
vector<int>::iterator it;
for(it=vec.begin();it!=vec.end();it++)
cout<<*it<<endl;
reverse(vec.begin(),vec.end());
for(size_t i = 0;i< vec.size();i++)
cout<<vec.at(i)<<endl;
- 元素排序
sort(vec.begin(),vec.end);
实战–字符串反转
代码
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
vector<char>inversion(string str){
int i;
int len = str.length();
static vector<char> cat;
for(i=len-1;i>=0;i--){
cat.push_back(str[i]);
}
return cat;
}
int main(){
char a[1005];
gets(a);
string s(a);//必须转换为string类型才可以
vector<char>vec;
vec = inversion(s);
for(size_t i = 0;i< vec.size();i++)
cout<<vec.at(i);
return 0;
}