C++语法知识点-vector+子数组
- 一维数组定义
- 无参数
- 有参数
- 迭代器
- 扩容操作reserve
- 二维数组 vector 定义
- 创建m*n的二维vector
- vector< vector<int> > v(m, vector<int>(n) )
- 初始化定义
- vector常用函数的实例分析
- 访问操作
- resize 函数
- push _back ( )
- pop_back()函数
- size():
- insert()
- insert(pos,first,last)
- assign
- sort
- front
- back
- 子数组相关问题
- typeid
- auto
- 使用auto自动识别变量类型
- 遍历数组
一维数组定义
Vector是一个封装了动态大小数组的顺序容器(Sequence
Container)。跟任意其它类型容器一样,它能够存放各种类型的对象。可以简单的认为,向量是一个能够存放任意类型的动态数组。
无参数
有参数
#include<iostream>
#include<vector>
using namespace std;
class p
{
public:
p(int a=2,int b=3)
{
_a = a;
_b = b;
}
void print()
{
printf("%d ", _a);
printf("%d ", _b);
}
private:
int _a;
int _b;
};
void test2()
{
p d1(55,66);
vector<p> v1(2);
vector<p> v2(2, d1);
cout << "接下来开始打印v1的内容:" << endl;
for (auto v : v1)
{
v.print();
}
cout << "接下来开始打印v2的内容:" << endl;
for (auto v : v2)
{
v.print();
}
}
int main()
{
test2();
system("pause");
return 0;
}
迭代器
//迭代器进行初始化创建出来的对象
vector<Date>::iterator it1 = v.begin() + 1;
vector<Date>v1(it1, v.end() - 1);
//访问v1数组就是访问v数组
- 并且可以通过 *it 来访问vector里的元素
#include<iostream>
#include<vector>
using namespace std;
int main() {
vector<int> v;
v.push_back(1); //依次输入1、 2、 3
v.push_back(2);
v.push_back(3);
for (vector<int>::iterator it = v.begin(); it != v.end(); it++) {
cout << *it << " ";
}
return 0;
}
扩容操作reserve
动态数组的容量是不断的根据输入的数据的大小变化的,但是增加了reserve函数可以提前就进行扩展数组的容量
void test5()
{
vector<p> v1(5);
cout << v1.size() << endl;
cout << v1.capacity() << endl;
v1.reserve(100);
v1.push_back(p(11, 22));
cout << v1.size() << endl;
cout << v1.capacity() << endl;
}
- capacity()//求出数组容量的函数
二维数组 vector 定义
二维vector数组vector Arrayname[size]; Arrayname[]中的每一个元素都是一个vector。我们可以把二维vector数组当做两个维都可以变长的二维数组来理解。
创建m*n的二维vector
- 定义二维数组时候需要注意的事项
vector<vector> A;//错误的定义方式
vector<vector > A;//正确的定义方式
vector<vector >nums(m, vector(n)); //m*n的二维vector
定义了一个vector容器,元素类型为vector,初始化为包含m个vector对象,每个对象都是一个新创立的vector对象的拷贝,而这个新创立的vector对象被初始化为包含n个0。
vector< vector > v(m, vector(n) )
定义了一个vector容器,元素类型为vector,初始化为包含m个vector对象,每个对象都是一个新创立的vector对象的拷贝,而这个新创立的vector对象被初始化为包含n个0
初始化定义
初始化:
vector a(5); //初始化5个值为0的元素
vector a(5, 1);//定义了5个整型元素的向量,且给出每个元素的初值为1
int b[7] = { 1,2,3,4,5,9,8 }; vector a(b, b + 7); //从数组中获得初值
vector a(b.begin(), b.begin + 3); //定义了a值为b中第0个到第2个(共3个)元素
vector v{ 1,2,3,4,5 }; //使用花括号赋值
vector常用函数的实例分析
访问操作
- 普通数组访问
定义为vector v 的vector容器,可以使用 v[0]、v[1]、v[2]…这种方式来访问。当然,下标不能越界(v.size() - 1之内)。
注:v[0]、v[1]、v[2]等价于* (v.begin())、* (v.begin() + 1)、* (v.begin() + 2)。 - 迭代器访问
for (vector<int>::iterator it = v.begin(); it != v.end(); it++) {
cout << *it << " ";
}
resize 函数
是一个替换字符串长度的函数,有两个重载函数,第一个参数都是替换之后的大小,第二个为替换的字母
- 之后字符串未改变是因为resize(n)中的n 比原来的长度大,空字符为‘\0’
- a.resize(12, ‘a’) 将新扩展的空间填充为字符‘a
push _back ( )
vector对象里面这个函数的作用就是往数组后面插入数据
pop_back()函数
//pop_back()表示删除vector尾部的元素
size():
size()用来获得vector中元素的个数
insert()
insert(it, x)用来向vector的任意迭代器it处插入一个元素x
insert(pos,first,last)
- insert(pos,first,last) 在 pos 位置之前,插入其他容器(不仅限于vector)中位于 [first,last) 区域的所有元素(简单说就是把两个容器拼接在一起)。
#include<iostream>
#include<vector>
using namespace std;
int main() {
vector<int> v, v1, v2;
for (int i = 1; i <= 5; i++) v.push_back(i);
for (int i = 10; i <= 13; i++) v1.push_back(i);
//for (int i = 20; i <= 23; i++) v2.push_back(i);
v.insert(v.end(), v1.begin(), v1.end());
//v.insert(v.end(), v2.begin(), v2.end());
for (vector<int>::iterator it = v.begin(); it != v.end(); it++) {
cout << *it << " ";
}
return 0;
}
assign
这个函数的作用就是将对象原来的内容全部清空,将你给的内容填入到该对象的空间里面去
用迭代器进行访问
for (vector<int>::iterator it = v.begin(); it != v.end(); it++) {
cout << *it << " ";
}
- 下面是各种不同情况赋值操作
#include<iostream>
#include<vector>
using namespace std;
int main()
{
vector<int> v = { 1,2,3,4,5,6,7,8,9,10 };
//v.assign(10, 0);
/*vector<int> p;
p.assign(v.begin(), v.end());*/
/*v.assign({ 666,667,668 });
for (vector<int>::iterator it = v.begin(); it != v.end(); it++) {
cout << *it << " ";
}*/
return 0;
}
sort
排序
sort(v.begin(),v.end());
front
返回vector中的第一个元素
back
返回vector中的最后一个元素
子数组相关问题
typeid
获知变量类型名称,可以使用 typeid(变量).name()
#include<iostream>
#include<vector>
using namespace std;
int main()
{
//int a = 3;
//if (typeid(a) == typeid(int))
//{
// cout << "int" << endl;
//}
//return 0;
int a = 1;
double b = 3.14;
cout << typeid(a).name() << endl;
cout << typeid(b).name() << endl;
return 0;
}
auto
使用auto自动识别变量类型
#include<iostream>
#include<vector>
using namespace std;
int main()
{
auto a = 2;
auto b = 3.14;
auto c = "r";
cout << typeid(a).name() << endl;
cout << typeid(b).name() << endl;
cout << typeid(c).name() << endl;
return 0;
}
遍历数组
#include<iostream>
#include<vector>
using namespace std;
int main()
{
//普通的遍历数组操作
int a[] = { 1,2,3,4,5,6,7 };
//for (int i = 0; i < sizeof(a) / sizeof(a[0]); i++)
//{
// cout << a[i] << " ";
//}
//cout << endl;
//使用auto关键字进行操作
for (auto i : a)
{
cout << i << " ";
}
cout << endl;
return 0;
}