c++ 二维矩阵 转vector_c++ vector的用法,以及二维数组的传递和返回

本文展示了如何在C++中将二维矩阵转换为vector,并演示了vector的使用,包括直接访问元素、插入元素、遍历以及如何将vector中的sMatrix结构体转换回二维数组。
摘要由CSDN通过智能技术生成

// VectorTest.cpp : 定义控制台应用程序的入口点。

//

#include

#include

#include

#include

#include

using namespace std;

struct sMatrix{

/*3*3 matrix*/

double _line1[3],

_line2[3],

_line3[3];

/** \brief

* 给矩阵里的每个元素赋值为value

* \param value double

* \return void

*

*/

void SetAllElementValue(double value){

for(int i=0; i<3; ++i){

_line1[i] = value;

}

for(int i=0; i<3; ++i){

_line2[i] = value;

}

for(int i=0; i<3; ++i){

_line3[i] = value;

}

}

/** \brief

*

* \param value double

* \return 如果矩阵里的每个元素减去参数大于0.00001f,说明矩阵里的元素不等于参数值,返回false,如果比0.00001f小,则返回true

*

*/

bool AllElementsEqualValue(double value){

double d_value = 0.00001f;

double diff = 0.0f;

for(int i=0; i<3; ++i){

diff = abs(_line1[i] - value);

if(diff > 0 && diff > d_value){

return false;

}

}

for(int i=0; i<3; ++i){

diff = abs(_line2[i] - value);

if(diff > 0 && diff > d_value){

return false;

}

}

for(int i=0; i<3; ++i){

diff = abs(_line3[i] - value);

if(diff > 0 && diff > d_value){

return false;

}

}

return true;

}

double (*ConvertTo2DArray(double ary[][3]))[3]{

if(ary == NULL){

return NULL;

}

for(int i=0; i<3; ++i){

(*(ary+0))[i] = _line1[i];

}

for(int i=0; i<3; ++i){

(*(ary+1))[i] = _line2[i];

}

for(int i=0; i<3; ++i){

(*(ary+2))[i] = _line3[i];

}

return ary;

}

};

int main()

{

/*

这里的100为你vector里实际要存的数量,先给定一个大小的好处是,可以优化vector的执行速度.

而且这样一来,vector里直接就有了你申请的指定数量的元素

*/

std::vector _matrix_vec(100);

/*检查vector里现有的元素的数量*/

printf("there are %d elements in vector.\n", _matrix_vec.size());

/*

例如:直接改变vector里第5个元素的值

vector下标从0开始,第五个也就是下标为4的元素

*/

_matrix_vec[4]._line1[0] = 1.1f;

_matrix_vec[4]._line1[1] = 2.2f;

_matrix_vec[4]._line1[2] = 3.3f;

/*显示第五个元素第一行的值*/

printf("(%0.2f,%0.2f,%0.2f)\n", _matrix_vec[4]._line1[0], _matrix_vec[4]._line1[1], _matrix_vec[4]._line1[2]);

/*插入一个值*/

sMatrix tmpMatrix = {0.0f};

tmpMatrix._line1[0] = 1.0f;

tmpMatrix._line2[1] = 2.1f;

tmpMatrix._line3[2] = 3.2f;

_matrix_vec.push_back(tmpMatrix);

/*显打印插入的值,因为_matrix_vec.push_back函数是插入到vector最后的,所以因为取vector的大小-1*/

int tmpLastElement = _matrix_vec.size() - 1;

printf("(%0.2f,%0.2f,%0.2f)\n", _matrix_vec[tmpLastElement]._line1[0], _matrix_vec[tmpLastElement]._line2[1], _matrix_vec[tmpLastElement]._line3[2]);

/*检查vector里是不是多一个元素*/

printf("there are %d elements in vector.\n", _matrix_vec.size());

/*

vector遍历

遍历方法有2种,一种是直接引用下标,还有一种是迭代器。

下标操作参见上面的使用方法,下面使用迭代器操作,查找一个元素全部为1的矩阵,找到第一个符合条件的就返回。

先在vector里创建一个元素全部为一的矩阵

*/

/*设置vector里第67个矩阵的所有元素为1.0f*/

_matrix_vec[66].SetAllElementValue(1.0f);

/*定义迭代器查找*/

std::vector::iterator tmpBegin = _matrix_vec.begin();

for(int tmpPos = 0; tmpBegin != _matrix_vec.end(); ++tmpBegin, ++tmpPos){

/*

必须对迭代器解引用才能是真正的元素。

WARNING:

在循环里使用迭代器特别要注意的是循环移除元素,必须保存指向下一个元素的迭代器才能移除当前迭代器,

如果对当前迭代器使用了移除,而后对该迭代器使用++功能,则会导致错误,因为在移除的时候,就已经使

迭代器无效

*/

if((*tmpBegin).AllElementsEqualValue(1.0f)){

printf("I find the %dth element that all elements of matrix are 1.0f.\n", tmpPos);

break;

}

}

/*

如果要移除vector里的某个元素,可以使用_matrix_vec.pop_back,这个方法只能移除vector里最后一个元素,这个不在举例。

也可以用迭代器找到相应的元素后,使用移除功能,如移除刚刚找到的元素:

*/

_matrix_vec.erase(tmpBegin);

/*检查vector里的元素的个数*/

printf("there are %d elements in vector.\n", _matrix_vec.size());

/*把sMatrix转换为3*3的矩阵*/

double tmpArrray[3][3] = {0.0f};

_matrix_vec[4].ConvertTo2DArray(tmpArrray);

/*查看矩阵内容*/

for(int i=0; i<3; ++i){

printf("(%0.2f,%0.2f,%0.2f)\n", tmpArrray[i][0], tmpArrray[i][1], tmpArrray[i][2]);

}

system("pause");

return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值