2013-05-02 2 views
0

Основная проблема Не могли бы вы помочь мне понять, как использовать вектор вектора. Возьмем, например, vector< vector<int> > help. Я не понимаю, является ли это вектором ints, каждый из которых является вектором int или если он является вектором вектора ints? Я также не понимаю, как его использовать.Ошибка векторных проблем

Пример кода

vector< vector<int> > test[500]; 
test[0].emplace_back(1); 
cout << test[0][0]; 
test[50].emplace_back(4); 
cout << " " <<test[50][0]; 

-console- 
1 50 //this is not what happens btw, but it is the desired results 

Отказ Я провел большую часть утреннего тестирования и прибегая к помощи этого. Пожалуйста, помогите :) Я сделал свой hw. Я не могу найти документацию векторов вектора. Также у меня есть все правильные библиотеки, и я использую namespace std. Я ноб, и я понимаю, что пространства имен - это плохая практика, но сейчас она очень удобна для меня.

В принципе, я хочу установить размер вектора, заполненный каждым pt, являющимся вектором int. Я бы предпочел не идти по пути отдельного класса. Является ли вектор вектора int, правильная вещь для изучения?

Спасибо :)

+2

У вас нет вектора векторов. У вас есть массив векторов векторов. – juanchopanza

+0

Что ты имеешь в виду? – Krtko

+1

У вас есть массив, содержащий 500 векторов векторов. – juanchopanza

ответ

2

Это вектор междунар:

std::vector<int> v; 

это вектор векторов междунар:

std::vector<std::vector<int>> v2; 

это массив векторов векторов Интс, что и у вас есть :

std::vector<std::vector<int>> test[500]; 

каждый элемент этого массива - std::vector<std::vector<int>>. Таким образом, test[0] является одним из таких.

Если вы хотите, вектор 500 по умолчанию, построенных векторов междунара, вам нужен

std::vector<std::vector<int>> test(500); 
+0

lol спасибо чувак – Krtko

+0

теперь разность в походах между массивом и вектором. Удивительное спасибо. – Krtko

+0

для справок в будущем, http://stackoverflow.com/questions/6632971/what-is-the-difference-between-stdarray-and-stdvector-when-do-you-use-one-o – Krtko

2

test представляет собой массив из 500 векторов векторов междунар. Вторая строка вашего примера не должна компилироваться здесь, так как вы вызываете std::vector< std::vector<int> >::emplace_back(), который ожидает, что аргумент совместим с std::vector<int>, и вы предоставили int. Для уточнения:

  • test является std::vector< std::vector<int> >[500].
  • test[0] является std::vector< std::vector<int> >.
  • test[0][0] является std::vector<int>.
  • test[0][0][0] является int.

(разработчики педантичного C++ отметят, что последние три на самом деле ссылки, но я опускаю, что от типа для ясности.)

1

То, что вы есть массив vectorvector -of- который, как я считаю, с тех пор, как вы обращаетесь к данным с двумя индексами, не то, что вы хотели.

Я считаю, что вы, возможно, просто опечаткой-эд инициализации конструктора:

vector< vector<int> > test(500); // Note() instead of [] here. 

Это создает вектор-из-векторов, с 500 внутренних векторами предварительно созданы для вас. Тогда остальная часть вашего кода должна работать!

+0

Oooh man ... lol большое спасибо. – Krtko

2

vector просто изменяемый массив.

Чтобы объявить вектор int (массив межд), просто сделать:

std::vector<int> vec;

Чтобы объявить массив, в котором отдельные элементы вектора вы:

std::vector< std::vector<int> > vecarr;

Чтобы установить начальный размер вектора, вы делаете:

std::vector<int> vec(500); не std::vector<int> vec[500], потому что это создает массив из 500 std::vectors. Аналогично, std::vector< std::vector<int> > vec[500]; создает массив из 500 векторов векторов.

Чтобы пропустить письмо std::, вы можете сказать using namespace std, прежде чем все это сообщите, что вы используете пространство имен std.

Смежные вопросы