Форум программистов, компьютерный форум CyberForum.ru

Двумерный вектор - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.60
Matlabist
2 / 2 / 0
Регистрация: 28.11.2010
Сообщений: 98
06.02.2011, 09:14     Двумерный вектор #1
Хочу создать в классе Model вектор двумерный указателей на объекты класса Cell.
Как можно создать двумерный вектор?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Model
{
public:
    
    class Model(int nx,int ny)
    {
 
    };
    class Cell
    {
 
    };
 
};
Двумерный вектор создавать как вектор векторов?
C++
1
typedef std::vector<std::vector> Vector2D;
Есть ли какие то готовые решения? Ка бы не перемудрить?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
06.02.2011, 09:25     Двумерный вектор #2
Matlabist, Вектор векторов. Это чем не готовое решение? оО
Ну и да...

C++
1
typedef std::vector<std::vector<T> > Vector2D;
Где T - Требуемый тип.
Matlabist
2 / 2 / 0
Регистрация: 28.11.2010
Сообщений: 98
06.02.2011, 09:34  [ТС]     Двумерный вектор #3
Получается что-то вроде этого.
Выдает ошибки
error C2146: syntax error : missing ';' before identifier 'Vector2D'
vector2D' : missing storage-class or type specifiers
'class std::vector<class std::vector<class Model::Cell,class std::allocator<class Model::Cell> >,class std::allocator<class std::vector<class Model::Cell,class
std::allocator<class Model::Cell> > > >' : no members defined using this type
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Model
{
public:;
       class Cell
    {
 
    };
    typedef std::vector<std::vector<Cell> > Vector2D;
    vector2D Vector2D; 
    class Model(int nx,int ny)
    {
 
    };
    
 
};
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
06.02.2011, 09:39     Двумерный вектор #4
Ага.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <vector>
 
class Model
{
public:
        class Cell
        {
 
        };
        typedef std::vector<std::vector<Cell> > Vector2D;
        Vector2D vector2D; 
        class Model(int nx,int ny)
        {
 
        };
        
 
};
Matlabist
2 / 2 / 0
Регистрация: 28.11.2010
Сообщений: 98
06.02.2011, 09:41  [ТС]     Двумерный вектор #5
Пишет предупреждение
warning C4786: 'std::reverse_iterator<std::vector<Model::Cell,std::allocator<Model::Cell> > const *,std::vector<Model::Cell,std::allocator<Model::Cell> >,std::vector<Model::Cell,std:
:allocator<Model::Cell> > const &,std::vector<Model::Cell,std::allocator<Model::Cell> > const *,int>' : identifier was truncated to '255' characters in the debug information
while compiling class-template member function '__thiscall std::vector<std::vector<Model::Cell,std::allocator<Model::Cell> >,std::allocator<std::vector<Model::Cell,std::alloc
ator<Model::Cell> > > >::std::vector<std::vector<Model::Cell,std::allocator<Model::Cell> >,std::allocator<std::vector<Model::Cell,std::allocator<Model::Cell> > > >(const std::allocator<std::vector<Model::Cell,std::allocator<Model::Cell> > > &)'
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
06.02.2011, 09:44     Двумерный вектор #6
Matlabist, У меня не было ворнингов. Не знаю.
Matlabist
2 / 2 / 0
Регистрация: 28.11.2010
Сообщений: 98
06.02.2011, 14:56  [ТС]     Двумерный вектор #7
Как в двумерный вектор положить объекты класса Cell?
[CPP]class Model
class Model
{
public:;
class Cell
{

};
typedef std::vector<std::vector<Cell> > Vector2D;
Vector2D vector2D;
class Model(int nx,int ny)
{
std::vector<Cell>
for(int i=0;i<nx;++i) {
for(int j=0;j<ny;++j) {
Vector2D.push_back(
};
};
};


};[CPP/]
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
06.02.2011, 15:05     Двумерный вектор #8
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Model
class Model
{
public:;
class Cell
{
 
};
typedef std::vector<std::vector<Cell> > Vector2D;
Vector2D vector2D; 
class Model(int nx,int ny)
{
std::vector<Cell>
for(int i=0;i<nx;++i) {
for(int j=0;j<ny;++j) {
Vector2D.push_back(
}; 
};
};
 
 
};
Меня очень интересует 11 строчка. Вы чего ей добиться хотели?

Добавлено через 4 минуты
А вообще меня целая куча строчек интересует. Такое ощущение, что вы прочитали одну главу - про классы (да и то не полностью) - и стали остальной синтаксис по аналогии писать. Куча точек с запятой, там, где они совершенно не нужны, и отсутствие их в, наоборот, необходимых местах. 13 строка и далее - это что, вы вложенный цикл типа std::vector<Cell> объявили? Vector2D.push_back( - что за такой недоношенный пуш_бэк? Конструктор зачем-то словом class предварили, где вы такое увидели? Короче, совет вам - учите матчасть.
Matlabist
2 / 2 / 0
Регистрация: 28.11.2010
Сообщений: 98
06.02.2011, 16:02  [ТС]     Двумерный вектор #9
Получилось что-то вроде такого. Ничего я не перемудрил?
У меня VS 6.0 дает предупреждения
warning C4786: 'std::reverse_iterator<std::vector<Model::Cell,std::allocator<Model::Cell> > const *,std::vector<Model::Cell,std::allocator<Model::Cell> >,std::vector<Model::Cell,std:
:allocator<Model::Cell> > const &,std::vector<Model::Cell,std::allocator<Model::Cell> > const *,int>' : identifier was truncated to '255' characters in the debug information
Причем VS 2010 таково нет.
Не могу понять мочему на экране
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
i = 1 j = 1
 
i = 1 j = 2
 
i = 1 j = 3
 
i = 1 j = 1
 
i = 1 j = 2
 
i = 1 j = 3
 
i = 1 j = 1
 
i = 1 j = 2
 
i = 1 j = 3
Хотя должно быть по идеи
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
i = 1 j = 1
 
i = 1 j = 2
 
i = 1 j = 3
 
i = 2 j = 1
 
i = 2 j = 2
 
i = 2 j = 3
 
i = 3 j = 1
 
i = 3 j = 2
 
i = 3 j = 3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include "stdafx.h"
#include <vector>
#include <stdlib.h>
class Model
{
public:
    int nx,ny;
    class Cell
    {
        public:
        int x;
        int y;
        Cell(int x_,int y_)
        {
            x=x_;
            y=y_;
        };
    };
    typedef std::vector<std::vector<Cell> > Vector2D;
    typedef std::vector<Cell> Vector1D;
    Vector2D vector2D; 
    class Model(int nx_,int ny_)
    {
        nx=nx_;ny=ny_;
        Vector1D vector1D;
        for(int i=0;i<nx;++i) {
            for(int j=0;j<ny;++j) {
                Cell* cell=new Cell(i+1,j+1);
                vector1D.push_back(*cell);
            };  
            vector2D.push_back(vector1D);
 
        };
    };
    void PrintCells()
    {
        for(int i=0;i<nx;++i) {
            for(int j=0;j<ny;++j) {
                printf("\ni = %d j = %d\n",vector2D.at(i).at(j).x,vector2D.at(i).at(j).y);
            };
        };
    };
 
};
 
 
int main(int argc, char* argv[])
{
    Model* model=new Model(3,3);
    model->PrintCells();
    printf("Hello World!\n");
    return 0;
}
Добавлено через 15 минут
Понял. Нужно было чистить вектор vector1D на 33 строке.
vector1D.erase(vector1D.begin(),vector1D.end()--);
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.02.2011, 16:06     Двумерный вектор
Еще ссылки по теме:

Двумерный вектор, ошибка C++
Двумерный вектор из разных типов - возможно? C++
C++ Как передать массив (двумерный/одномерный вектор) в функцию C++?

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
06.02.2011, 16:06     Двумерный вектор #10
Легче метод clear() применить.
Yandex
Объявления
06.02.2011, 16:06     Двумерный вектор
Ответ Создать тему
Опции темы

Текущее время: 20:30. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru