绿色计算大赛--字符串反转

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