C++中vector的用法

由于项目需要,发现自己对C++中vector的用法不是很清楚,因此写一篇博文来介绍vector的基础用法。

vector简介

vector是表现为可变长数组的序列容器。vector使用连续的存储位置来存储元素,也就是说,vector可以使用一个指针上的偏移量来访问其元素,就像数组一样。但与数组不同的是,它们的大小可以动态变化,其存储由容器自动处理。 因此,vector相比于数组,vector消耗更多的内存,以换取管理存储和动态增长的能力。

与其它的动态序列容器(deque, lists, forward_lists)相比,vector可以非常高效的访问其元素,就像数组一样,并且可以相对高效的增加和删除元素从其末尾。对于在其它位置插入或删除元素的操作,它的性能要比其它的要差,而且其迭代器和引用的一致性相比lists和forward_lists要差。

vector的基本操作

1.头文件的调用:

1
#include <vector>

2.创建一个名为vec的vector对象:

1
vector<int> vec;	//以下的示例如无特殊声明,均以vec作为示例

3.向量大小:

1
vec.size();

4.向量清空:

1
vec.clear();

5.尾部插入数字:

1
vec.push_back(a);

6.使用下标访问元素:

1
cout << vec[0] << endl;		//索引号从0开始

7.插入元素:

1
vec.insert( vec.begin() + i, a );		//在第i个元素后面插入a

8.删除单个元素:

1
vec.erase(vec.begin()+2);		//删除第3个元素

9.删除区间元素:

1
vec.erase(vec.begin()+i,vec.end()+j);		//删除区间[i,j-1];区间从0开始

10.使用迭代器访问元素:

1
2
3
<span style="font-size:18px;">vector<int>::iterator it;
for(it=vec.begin();it!=vec.end();it++)
cout<<*it<<endl;</span>

Eigen库的安装

由于C++对矩阵的运算支持不是很好,而Eigen库则是一个简便的用于矩阵运算的库,因此需要安装它。在Ubuntu中安装该库的指令如下:

1
sudo apt-get install libeigen3-dev

安装完成后,该库的路径为/usr/include/eigen3,使用时注意调用该路径。

vector的元素为自定义类型

由于项目需要,需要自己定义一个类型作为vector的元素。该段代码的目的是保存两组六轴机器人速度于一个vector中,Ubuntu环境下的main.cpp代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <iostream>
#include <vector>
#include <Eigen/Core> // Eigen库
#include <Eigen/Dense> // 稠密矩阵的代数运算

using namespace std;
using namespace Eigen;

#define Vector6d Matrix<double,6,1> // Eigen中所有向量和矩阵都是Eigen::Matrix,它是一个模板类,前三个参数为:数据类型,行,列

int main() {
Vector6d robotJointVel1; // 声明第1组六轴机器人关节速度
Vector6d robotJointVel2; // 声明第2组六轴机器人关节速度
vector<Vector6d> vel; // 声明一个vector用来存放两组速度
robotJointVel1 << 0, 0, 0.04, 0, 0, 0; // 定义第一组速度
robotJointVel2 << 1, 1, 1, 1, 1, 1; // 定义第2组速度
cout << "Size of vel: " << vel.size() << endl;
cout << "Add the 1st data in the end of the vector..." << endl;
vel.push_back(robotJointVel1);
cout << "robotJointVel1: " << endl;
cout << vel[0] << endl;
cout << "Size of vel: " << vel.size() << endl;
cout << "Add the 2nd data in the end of the vector..." << endl;
vel.push_back(robotJointVel2);
cout << "robotJointVel1: " << endl;
cout << vel[1] << endl;
cout << "Size of vel: " << vel.size() << endl;
return 0;
}

CMakeLists.txt代码如下:

1
2
3
4
5
6
7
8
9
cmake_minimum_required(VERSION 3.1.0)

project(VectorTest)

set(SRC_LIST main.cpp ${SRC_FILES})

include_directories("/usr/include/eigen3") # 调用eigen3库

add_executable(VectorTest main.cpp ${SRC_LIST})

程序运行结果如下:
VectorTest

本文主要介绍vector的基础用法,关于Eigen库将在以后介绍,本文的参考如下:
C++ vector用法(详解!!函数,实现)
vector详解

------ 本文结束感谢您的阅读------
Donate a cup of cola?