2011-11-27 52 views
0

在我的程序工作,我有整數的向量的向量。現在,我想從向量的向量採取一個載體,有它在另一個載體容器操作,但我得到的錯誤...迭代器載體媒介的失敗,一個1-d矢量

|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中,我注意到了我的錯誤。

謝謝你的幫助!

+1

你確定錯誤不在上面的行嗎?應該是,'std :: vector > k(13,std :: vector (5));'? –

+0

不,我的程序是相當複雜的,有噸 –

+2

在任何情況下示出的兩條線之間的代碼,'的std ::矢量 new_v(K [2]);'應該工作一樣好。 –

回答

2

這是很難知道的,因爲你還沒有發佈的實際代碼到這個問題。我懷疑你錯誤地將你項目中的代碼複製到Stack Overflow。

在你的項目的那一行看起來是這樣的:

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

注意額外=

您與vector::iterator類型的表達式,這是行不通的初始化new_v。您鍵入到SO,但是該聲明,工作:

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和相應的錯誤信息。

+0

你得到的答案已經死了!做得好! –

+0

我以爲**我**是心靈的... –

0

錯誤消息告訴我們,你要(重新)從載體創建矢量::迭代器。由於向量不支持這種構造函數或複製賦值,編譯器會引發錯誤。但是,您在此發佈的代碼是有效的。