在我的程序中,我有一个向量的矢量向量。现在我想从矢量矢量中取一个矢量并在另一个矢量容器中操作,但是我得到了错误...
|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中,我注意到了我的错误。
感谢您的帮助!
答案 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不支持这种构造函数或复制赋值,编译器会引发错误。但是,此处发布的代码有效。