目录
vector的几种初始化及赋值方式(1)不带参数的构造函数初始化(2)带参数的构造函数初始化(3)通过数组地址初始化(4)通过同类型的vector初始化(5)通过insert初始化(6)通过copy函数赋值
二维vector初始化vector的例子参考
vector的几种初始化及赋值方式
(1)不带参数的构造函数初始化
//初始化一个size为0的vector
vector<int> abc;
(2)带参数的构造函数初始化
//初始化size,但每个元素值为默认值
vector<int> abc(10); //初始化了10个默认值为0的元素
//初始化size,并且设置初始值
vector<int> cde(10,1); //初始化了10个值为1的元素
(3)通过数组地址初始化
int a[5] = {1,2,3,4,5};
//通过数组a的地址初始化,注意地址是从0到5(左闭右开区间)
vector<int> b(a, a+5);
(4)通过同类型的vector初始化
vector<int> a(5,1);
//通过a初始化
vector<int> b(a);
(5)通过insert初始化
//insert初始化方式将同类型的迭代器对应的始末区间(左闭右开区间)内的值插入到vector中
vector<int> a(6,6);
vecot<int> b;
//将a[0]~a[2]插入到b中,b.size()由0变为3
b.insert(b.begin(), a.begin(), a.begin() + 3);
insert也可通过数组地址区间实现插入
int a[6] = {6,6,6,6,6,6};
vector<int> b;
//将a的所有元素插入到b中,同样是左闭右开区间
b.insert(b.begin(), a, a+6);
此外,insert还可以插入m个值为n的元素
//在b开始位置处插入6个6
b.insert(b.begin(), 6, 6);
(6)通过copy函数赋值
vector<int> a(5,1);
int a1[5] = {2,2,2,2,2};
vector<int> b(10);
/*将a中元素全部拷贝到b开始的位置中,注意拷贝的区间为a.begin() ~ a.end()的左闭右开的区间*/
copy(a.begin(), a.end(), b.begin());
//拷贝区间也可以是数组地址构成的区间
copy(a1, a1+5, b.begin() + 5);
二维vector初始化
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std
;
int main()
{
vector
< vector
<int> > arry
;
vector
<int> d
;
int i
, j
, k
, n
;
int number
;
scanf("%d", &n
);
for( i
=0; i
<n
; i
++ ){
for( j
=0; j
<n
; j
++ ){
scanf("%d", &number
);
d
.push_back( number
);
}
sort( d
.begin(), d
.end() );
arry
.push_back( d
);
d
.resize(0);
}
if( arry
.empty() )
printf("0\n");
else{
for( i
=0; i
<arry
.size(); i
++ ) {
for( j
=0; j
<arry
[0].size(); j
++ ){
printf("%d ", arry
[i
][j
] );
}
printf("\n");
}
}
return 0;
}
vector的例子
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include <vector>
#include <list>
using namespace std
;
void test01()
{
vector
<int> v
;
for (int i
= 0; i
< 10; i
++){
v
.push_back(i
);
cout
<< v
.capacity() << endl
;
}
}
void printVector(vector
<int>& v
)
{
for (vector
<int>::iterator it
= v
.begin(); it
!= v
.end();it
++)
{
cout
<< *it
<< " ";
}
cout
<< endl
;
}
void test02()
{
vector
<int >v
;
int arr
[] = { 2, 3, 4, 1, 9 };
vector
<int> v1(arr
, arr
+ sizeof(arr
) / sizeof(int));
vector
<int>v2(v1
.begin(), v1
.end());
printVector(v2
);
vector
<int>v3(10, 100);
printVector(v3
);
vector
<int>v4
;
v4
.assign(v3
.begin(), v3
.end());
printVector(v4
);
v4
.swap(v2
);
cout
<< "交换后的v4 " << endl
;
printVector(v4
);
cout
<< "v4容器的大小" << v4
.size() << endl
;
if (v4
.empty())
{
cout
<< "v4空" << endl
;
}
else
{
cout
<< "v4不空" << endl
;
}
v4
.resize(10,-1);
printVector(v4
);
v4
.resize(3);
printVector(v4
);
}
void test03()
{
vector
<int>v
;
for (int i
= 0; i
< 100000; i
++)
{
v
.push_back(i
);
}
cout
<< "v的容量" << v
.capacity() << endl
;
cout
<< "v的大小" << v
.size() << endl
;
v
.resize(3);
cout
<< "v的容量" << v
.capacity() << endl
;
cout
<< "v的大小" << v
.size() << endl
;
vector
<int>(v
).swap(v
);
cout
<< "v的容量" << v
.capacity() << endl
;
cout
<< "v的大小" << v
.size() << endl
;
}
void test04()
{
vector
<int>v
;
v
.reserve(100000);
int * p
= NULL;
int num
= 0;
for (int i
= 0; i
< 100000;i
++)
{
v
.push_back(i
);
if (p
!=&v
[0])
{
p
= &v
[0];
num
++;
}
}
cout
<< num
<< endl
;
}
void test05()
{
vector
<int>v
;
v
.push_back(10);
v
.push_back(30);
v
.push_back(20);
v
.push_back(50);
cout
<< "v的front" << v
.front() << endl
;
cout
<< "v的back" << v
.back() << endl
;
v
.insert(v
.begin(), 2 ,100);
printVector(v
);
v
.pop_back();
printVector(v
);
v
.erase(v
.begin());
printVector(v
);
if (v
.empty() )
{
cout
<< "为空" << endl
;
}
}
void test06()
{
vector
<int>v
;
for ( int i
= 0; i
< 10; i
++)
{
v
.push_back(i
);
}
for (vector
<int>::reverse_iterator it
= v
.rbegin(); it
!= v
.rend();it
++)
{
cout
<< *it
<< " ";
}
cout
<< endl
;
vector
<int>::iterator itBegin
= v
.begin();
itBegin
= itBegin
+ 3;
list
<int>l
;
for (int i
= 0; i
< 10;i
++)
{
l
.push_back(i
);
}
list
<int>::iterator lIt
= l
.begin();
}
int main(){
test05();
system("pause");
return EXIT_SUCCESS
;
}
参考
cpp-stl-tutorial vector<vector<string>> 双层vector使用 6 个技巧,提升 C++11 的 vector 性能