将迭代器解引用到 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 但提供的示例与答案没有任何关系。 我有一个二维向量vector> det;我想将最后一个值或最近的 push_back 值分配给另一个 2D 向量 v。这就是你所要求的。我提供了工作示例来演示如何做到这一点。无论如何,如果您的问题得到解决,那也没关系。

以上是关于将迭代器解引用到 2D 向量并将其值分配给另一个 2D 向量的主要内容,如果未能解决你的问题,请参考以下文章

按值而不是引用将 List<T> 分配给另一个 List<T> [重复]

将二维数组传递给另一个类 C++

如何在 STL 中使用指向向量的指针,就像我们在将数组地址传递给另一个函数时将指针分配给数组一样?

分配向量中元素的索引而不是其值

我们如何将 UITapGestureRecognizer 分配给另一个视图?

将一个数组中的值分配给另一个数组而不循环