Итератор вектора векторов не работает с 1-D вектором - PullRequest
0 голосов
/ 27 ноября 2011

В моей программе у меня есть вектор вектора целых чисел.Теперь я хочу взять один вектор из вектора векторов и манипулировать им в другом контейнере векторов, но я получаю ошибку ...

|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 () константным типам итераторов ... 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());.

Я хотел бы поблагодарить Роб за то, что он дал мне инициативу скопировать и вставить мой код в SO, где я заметил свою ошибку.

Спасибо за помощь!

Ответы [ 2 ]

2 голосов
/ 27 ноября 2011

Сложно понять, потому что вы не ввели свой фактический код в вопрос. Я подозреваю, что вы неправильно скопировали код из вашего проекта в Stack Overflow.

оскорбительная строка в вашем проекте выглядит примерно так:

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

Обратите внимание на дополнительные =.

Вы инициализируете new_v выражением типа vector::iterator, которое не будет работать. Однако оператор, введенный вами в 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 голосов
/ 27 ноября 2011

Сообщение об ошибке говорит нам, что вы пытаетесь (заново) создать вектор из вектора :: итератор. Поскольку vector не поддерживает этот вид конструктора или назначения копирования, компилятор выдаст ошибку. Однако ваш опубликованный код здесь действителен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...