2015-10-20 2 views
-3

Привет, ребята, я пытаюсь написать метод для создания векторов с именем y_i, где я начинаю с 1 и заканчивается строками имен переменных для ввода матрицы. Я пытаюсь записать его так, чтобы он динамически добавлял достаточно векторов в этот код. Векторы вектора формы y_1, вектор y_2 и т. Д.Переменные методы создания в C++

Код ниже. Мои вопросы: я делаю это правильно? мне нужна структура? Класс? Помогите!

#include <iostream> 
#include <vector> 
using namespace std; 
int i, rows; 
vector<vector<double> >matrix; 
void VectorCreation(int rows) 
{ 
    for (i = 1; i <= rows; i++) 
    { 
     new vector<double>; 
    } 
} 
int main() 
{ 
    cin >> rows; 
    VectorCreation(rows); 
    return 0; 
} 
+0

Не начинайте с глобальными переменными, и большую часть времени вам не нужно использовать 'new' в современном C++ (плюс, вы ничего не делаете * с этим!). – crashmstr

+1

_'new vector ; '_ эта линия не имеет абсолютно никакого смысла. Вы выделяете 'vector ' (который вы не должны в любом случае) и отбрасываете результат. –

+2

Oy .... с чего начать? Не используйте 'new' *, если вы не знаете, что делаете *. Не используйте глобальные переменные *, если вы не знаете, что делаете *. Не пытайтесь использовать пробную версию и ошибку C++. [Получить хорошую книгу] (http://stackoverflow.com/questions/388242). ;-) Говоря, что вы ищете, это [документация] (http://www.cppreference.com) ... – DevSolar

ответ

1

Вы в настоящее время выделяют std::vector на куче с new но не назначайте его к чему-либо, так что данные, выделенные навсегда потеряны.

Я бы не совет, используя new для этого, но только с помощью выделения стека:

#include <iostream> 
#include <vector> 
using namespace std; 
int rows; 
vector<vector<double> >matrix; 
void VectorCreation(int rows) 
{ 
    matrix.resize(rows); 
} 
int main() 
{ 
    cin >> rows; 
    VectorCreation(rows); 
    return 0; 
} 
+0

И вот почему я попросил о помощи. Быть относительно новым для C++ и всех. Благодарю. –

1

Во-первых

void VectorCreation(int rows) 
{ 
    for (i = 1; i <= rows; i++) 
    { 
     new vector<double>; 
    } 
} 

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

Во-вторых, если вы хотите создать 2d вектор вы будете использовать:

std::vector<std::vector<type>> vector_name(num_rows, std::vector<type>(num_cols, default_value)); 
+0

И как отобразить элемент вектора 2d? –

+0

@ChrisJabbour [Здесь] (http://stackoverflow.com/questions/26937550/two-dimensional-vector-printing) является примером того, как печатать 2d-вектор. – NathanOliver

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