将迭代器解引用到 2D 向量并将其值分配给另一个 2D 向量
Posted
技术标签:
【中文标题】将迭代器解引用到 2D 向量并将其值分配给另一个 2D 向量【英文标题】:Derefrencing an iterator to 2D vector and assigning its value to another 2D vector 【发布时间】:2016-05-12 08:18:29 【问题描述】:我有一个 2D 向量 vector<vector<int> > det;
,我想将最后一个值或最近的 push_back
'd 值分配给另一个 2D 向量 v。这是我尝试过的 v = *(det.rbegin());
,但它显示了一个错误。正确的做法是什么?
错误消息:要求从“std::vector”转换为非标量类型“std::vector >”
【问题讨论】:
考虑阅读错误信息。 @user2079303 我已经阅读了错误信息,但是'std::vector >'是什么意思? 请提供完整的代码。 也许你的意思是v.push_back( *det.rbegin() );
@M.M 这正是我想要的,只是我写代码太粗心了。
【参考方案1】:
您的二维数组的最后一个条目不是二维数组,即向量
因此它不能分配给另一个类型的变量
向量>
这很好用:
#include<iostream>
#include<vector>
int main()
std::vector<std::vector<int> > det, det2;
std::vector<int> vector1, vector2, vector3;
vector1.push_back(3);
vector1.push_back(4);
vector1.push_back(5);
vector2.push_back(13);
vector2.push_back(14);
vector2.push_back(15);
vector3.push_back(113);
vector3.push_back(114);
vector3.push_back(115);
std::vector<int> member_of_2darray;
det.push_back(vector1);
det.push_back(vector2);
det.push_back(vector3);
det2.push_back(det.back());
std::cout<<det2[0][2]<<std::endl; // returns 115
//last:element
std::cout<<det.back().back()<<std::endl;
编辑:如果您非常想使用迭代器:这是一个工作示例:
#include<iostream>
#include<vector>
int main()
std::vector<std::vector<int> > det, det2;
std::vector<int> vector1, vector2, vector3;
std::vector<std::vector<int> >::iterator it;
vector1.push_back(3);
vector1.push_back(4);
vector1.push_back(5);
vector2.push_back(13);
vector2.push_back(14);
vector2.push_back(15);
vector3.push_back(113);
vector3.push_back(114);
vector3.push_back(115);
std::vector<int> member_of_2darray;
det.push_back(vector1);
det.push_back(vector2);
det.push_back(vector3);
it = det.end();
det2.push_back(*(it-1));
std::cout<<det2[0][2]<<std::endl; //output: 115
【讨论】:
我想提取det的最后一个元素的值,但不知道det的大小。 det.back() 的最后一个元素。或者,使用迭代器,它的最后一个元素是 *(it - 1)。 问题出在 *(det.rbegin()) 的返回类型上,它是你在回答中提到的 vector以上是关于将迭代器解引用到 2D 向量并将其值分配给另一个 2D 向量的主要内容,如果未能解决你的问题,请参考以下文章
按值而不是引用将 List<T> 分配给另一个 List<T> [重复]
如何在 STL 中使用指向向量的指针,就像我们在将数组地址传递给另一个函数时将指针分配给数组一样?