c++中vector向量几种情况的总结(向量指针,指针的向量)
1.标准库vector类型
vector 是同一种类型的对象的集合,每个对象都有一个对应的整数索引值。标准库将负责管理与存储元素相关的内存。我们把 vector 称为容器,是因为它可以包含其他对象。一个容器中的所有对象都必须是同一种类型的。
用 vector之前,必须包含相应的头文件。
#include <vector>
1
using std::vector;
vector 是一个类模板(class template)。使用模板可以编写一个类定义或函数定义,而用于多个不同的数据类型。因此,我们可以定义保存 string 对象的 vector,或保存 int 值的 vector,又或是保存自定义的类类型对象vector。使用类模板时只需要简单了解类模板是如何定义的就可以了。声明从类模板产生的某种类型的对象,需要提供附加信息,信息的种类取决于模板。以 vector 为例,必须说明 vector 保存何种对象的类型,通过将类型放在类模板名称后面的尖括号中来指定类型:
vector<int> ivec; // ivec holdsobjects of type int
vector<Sales_item> Sales_vec; //holds Sales_items
1
2
注意:和其他变量定义一样(作为定义变量看待,如 int a;float b;),定义 vector 对象要指定类型和一个变量的列表。上面的第一个定义,类型是vector(相当于int,或double),该类型即是含有若干 int 类型对象的 vector,变量名为 ivec(相当于a,b)。第二个定义的变量名是 Sales_vec,它所保存的元素 是 Sales_item 类型的对象。即,
定义方法为:vector<类型> 名称
vector<类型> :作为一个整体,是类型,相当于int,float。
名称 相当于变量的名字,a,b。
则以下几种都是成立的
vector<int> k;//向量
vector<int*>kk;//int指针的向量,以后再详细斟酌
vector<int>*kkk;//vector向量指针
vector<int*>*kkkk;//int指针的向量指针(对比int*p理解,指针变量前面的“*”表示该变量的类型为指针变量,p是指针变量名,而不是*p)
vector 不是一种数据类型,而只是一个类模板,可用来定义任意多种数据类型。vector 类型的每一种都指定了其保存元素的类型。因此,vector<int> 和 vector<string> 都是数据类型。
2.Vector向量几种情况的总结
**1) vector<int>k;//向量**
1
#include<iostream>
#include<vector>
using namespace std;
int main()
{
vector<int> k;
for (int j = 0; j<12; j++)
{
k.push_back(j);//向kk中追加值
}
for (int j = 0; j<12; j++)
{
cout <<k[j] << " ";
}
system("pause");
return 0;
}
**2)vector <vector> kk;//int指针的向量**
#include<iostream>
#include<vector>
using namespace std;
int main()
{
vector<int*> k;
int *p = new int[15];
for (int j = 0; j<15; j++)
{
p[j] = j;
k.push_back(&p[j]);
}
for (int i = 0; i < 15;i++)
{
cout << *k[i]<< " ";//因为向量容器里面都是int型的指针变量,
} //所以值都是指针,所以需要间接访问运算符*
delete[]p;
system("pause");
return 0;
}
**3) vector<int> *kkk;//vector向量指针**
1
#include<iostream>
#include<vector>
using namespace std;
int main()
{
vector<int> *k;//vector向量指针
k = new vector<int>[5];
//相当于int *p = new int[5];即vector<int> *kkk=new vector<int>[5];
for (int i = 0; i<5; i++)
{
for (int j = 0; j<10; j++)
{
k[i].push_back(j);//像向量指针中追加值
}
}
for (int i = 0; i<5; i++)
{
for (int j = 0; j < k[i].size(); j++)
cout << k[i][j] << " ";
cout << endl;
}
delete[] k;
system("pause");
}
**4)vector<int*> *kkkk;//int指针的向量指针**
[cpp] view plain copy
#include<iostream>
#include<vector>
using namespace std;
int main()
{
vector<int*> *k;//int指针的向量指针
k = new vector<int*>[5];
int *p = new int[10];
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 10; j++)
{
p[j] = j;
k[i].push_back(&p[j]);
}
}
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 10; j++)
{
cout<<*k[i][j]<<" ";
}
cout << endl;
}
delete[]p;
delete[]k;
system("pause");
}