向量矢量的迭代器无法使用1-D矢量

时间:2011-11-27 03:25:40

标签: c++ vector iterator

在我的程序中,我有一个向量的矢量向量。现在我想从矢量矢量中取一个矢量并在另一个矢量容器中操作,但是我得到了错误...

|error: conversion from '__gnu_cxx::__normal_iterator<int*, std::vector<int, std::allocator<int> > >' to non-scalar type 'std::vector<int, std::allocator<int> >' requested|

我想要做的一个例子如下......

#include <vector>
using namespace std;

vector<vector<int> > k (13,5);

void some_funct() {
    vector<int> new_v (k[2].begin(), k[2].end());  //This line is what throws the error
    //here I do some stuff with new_v (e.g. sort it)
}

我不确定我做错了什么。我尝试了一些事情,比如将begin()和end()迭代器分配给const迭代器类型...... vector<int>::const_iterator it = k[2].begin();,但这也不起作用。

这应该有效(因为k [x]将是一个向量)但我不知道出了什么问题。任何帮助表示赞赏!

编辑:

修改我的代码后,我发现实际上有错误。我没有vector<int> new_v (k[2].begin(),k[2].end());vector<int> new_v = (k[2].begin(),k[2].end());

我要感谢 Rob 让我主动将我的代码复制并粘贴到SO中,我注意到了我的错误。

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

很难知道,因为您尚未将实际代码发布到问题中。我怀疑你错误地将项目中的代码复制到Stack Overflow中。

项目中的违规行看起来像这样:

vector<int> new_v = (k[2].begin(), k[2].end()); 

请注意额外的=

您正在使用new_v类型的表达式初始化vector::iterator,这将无效。但是,您输入的声明 工作:

vector<int> new_v (k[2].begin(), k[2].end()); 

就像这样:

vector<int> new_v = vector(k[2].begin(), k[2].end());

或其中任何一个:

vector<int> new_v(k[2]);
vector<int> new_v = k[2];

请参阅https://ideone.com/uK8Xg以及相应的错误消息。

答案 1 :(得分:0)

错误消息告诉我们您正在尝试(重新)从vector :: iterator创建一个向量。由于vector不支持这种构造函数或复制赋值,编译器会引发错误。但是,此处发布的代码有效。