Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Указатаеь на вектор векторов 
:(
    Опции темы
Woo
Дата 14.4.2007, 09:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 14.4.2007

Репутация: нет
Всего: нет



привет

нормально ли так делать?

Код

const int X = 5, Y = 3;
...
vector<vector<bool> > *_boolVector = new vector<vector<bool> >( X, vector<bool>( Y, false ) );
...
delete _boolVector;

PM MAIL   Вверх
vinter
Дата 14.4.2007, 10:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 13
Всего: 56



а зачем тебе это?
да и выглядит как-то убого.. smile 


--------------------
Мой блог
PM MAIL WWW   Вверх
dizzy1984
Дата 14.4.2007, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 675
Регистрация: 15.2.2007

Репутация: 3
Всего: 25



Ничего плохого не вижу.
Для работы с динамической памятью посоветовал бы еше добавить const auto_ptr, чтобы избежать возможных проблем с утечками памяти.
А для какой задачи это тебе нужно.
В стандартной библиотеке есть специальные контейнеры для булевых величин.

PM MAIL   Вверх
zkv
Дата 14.4.2007, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: 26
Всего: 92



Цитата(dizzy1984 @  14.4.2007,  13:26 Найти цитируемый пост)
В стандартной библиотеке есть специальные контейнеры для булевых величин.

один из них как раз и есть vector<bool>  smile 
Цитата(dizzy1984 @  14.4.2007,  13:26 Найти цитируемый пост)
Ничего плохого не вижу.

плохо воспринимается smile

Это сообщение отредактировал(а) zkv - 14.4.2007, 13:30
PM MAIL   Вверх
dizzy1984
Дата 14.4.2007, 13:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 675
Регистрация: 15.2.2007

Репутация: 3
Всего: 25



Цитата(zkv @  14.4.2007,  13:29 Найти цитируемый пост)
плохо воспринимается 

Зато удобно используется.
Ну используй typedef.

Код

const int X = 5, Y = 3;    
typedef vector <bool> BOOLVECTOR;
typedef vector <BOOLVECTOR> BOOLMATRIX;
...    
BOOLMATRIX bm (X, BOOLVECTOR(Y, false))



Цитата(zkv @  14.4.2007,  13:29 Найти цитируемый пост)
один из них как оаз и есть vector<bool>   

 smile 
А точно, специализация.
Второй это bitset.

PM MAIL   Вверх
Fazil6
Дата 14.4.2007, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1653
Регистрация: 3.5.2006
Где: Минск

Репутация: 35
Всего: 60



Цитата(dizzy1984 @  14.4.2007,  13:26 Найти цитируемый пост)
Ничего плохого не вижу.

на самом деле vector<bool> - плохо.
Нужно избегать vector<bool>. Это не контейнер STL и он не содержит bool....

В требованиях стандарта говорится, что если v контейнер объектов T , с оператором [] , то должно компиллится
Код

T *p = &v[0];

но с bool такая конструкция не скомпилится. vector<bool> - это псевдоконтейнер. 
PM MAIL   Вверх
Woo
Дата 15.4.2007, 00:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 14.4.2007

Репутация: нет
Всего: нет



спасибо,

меня еще немного напрягает
Код

delete _boolVector;


я думаю наверно лучше всего использовать

Код

#include <boost/numeric/ublas/matrix.hpp>

using namespace boost::numeric::ublas;
...
matrix<bool> *_mBool = new matrix<bool>(X, Y);
...
delete _mBool;




Это сообщение отредактировал(а) Woo - 15.4.2007, 00:07
PM MAIL   Вверх
Fazil6
Дата 15.4.2007, 00:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1653
Регистрация: 3.5.2006
Где: Минск

Репутация: 35
Всего: 60



Цитата(Woo @  15.4.2007,  00:07 Найти цитируемый пост)
я думаю наверно лучше всего использовать

а чего не синхрофазотрон?
PM MAIL   Вверх
JackYF
Дата 16.4.2007, 16:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Цитата(dizzy1984 @  14.4.2007,  13:26 Найти цитируемый пост)
const auto_ptr,


Имхо - нафиг. Слишком много граблей будет да и читабельность...

Цитата(Fazil6 @  15.4.2007,  00:24 Найти цитируемый пост)
а чего не синхрофазотрон? 

действительно...

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

По начальному вопросу - кроме громоздкого объявления, проблем не вижу. Можно, как предлагали, сделать typedef разве что.



--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
dizzy1984
Дата 16.4.2007, 19:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 675
Регистрация: 15.2.2007

Репутация: 3
Всего: 25



Цитата(JackYF @  16.4.2007,  16:10 Найти цитируемый пост)
Имхо - нафиг. Слишком много граблей будет да и читабельность...

Обоснуй, пожалуйста.
В c++ есть по крайней мере 2 бича - приведение типов и проблемы с памятью (нет автоматической сборки, выход за пределы массива). Существуют даже языки, специально сделанные для устранения этих проблем (ну и для кое-чего другого), например, java.
О каких граблях ты говоришь. Если о передачи владельца, то эти проблемы снимает const. Если о читабельности - есть typedef smile ,
отступы, комментарии. Мне кажется читабельность менее важна чем стабильная работа программы (отсутствие утечек памяти). Или ты имеешь в виду другой smart pointer вместо этого.
Я слышал уже такое мнение и мне интересны его причины.
PM MAIL   Вверх
JackYF
Дата 16.4.2007, 21:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Цитата(dizzy1984 @  16.4.2007,  19:19 Найти цитируемый пост)
Обоснуй, пожалуйста.


Ну, во-первых, если мне понадобятся смарт-поинтеры, то я первую очередь посмотрю на boost::shared_ptr.

Про грабли с std::auto_ptr - вот не вспомню сейчас, где и у кого читал, но использование std::auto_ptr чревато очень многими граблями. Я тогда прочитал про эти грабли и для себя поставил галочку - "да, грабли опасные, auto_ptr "ф топку".
Например, передача такого ptr в функцию. И как раз const эти проблемы не снимает. Их снимает частично const&. Да и то там...

Но это далеко не все. Если как-нибудь пороюсь, то найду дли-и-инный список, почему потенциально плохо юзать std::auto_ptr.
Сейчас уже не вспомню все грабли.

Добавлено через 1 минуту и 39 секунд
Цитата(dizzy1984 @  16.4.2007,  19:19 Найти цитируемый пост)
Если о читабельности - есть typedef smile


Да, кстати, насчет typedef... А приведи-ка пример, как ты его применишь в данном случае.



--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Fazil6
Дата 16.4.2007, 21:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1653
Регистрация: 3.5.2006
Где: Минск

Репутация: 35
Всего: 60



Цитата(JackYF @  16.4.2007,  21:27 Найти цитируемый пост)
std::auto_ptr

нельзя хранить это в контейнерах STL. Семантика копирования у std::auto_ptr спецефическая. По стандарту это даже компиллится не должно.

Цитата(dizzy1984 @  16.4.2007,  19:19 Найти цитируемый пост)
Мне кажется читабельность менее важна чем стабильная работа программы

не менее важна. Сопровождение длится намного дольше чем разработка

PM MAIL   Вверх
dizzy1984
Дата 17.4.2007, 06:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 675
Регистрация: 15.2.2007

Репутация: 3
Всего: 25



Цитата(Fazil6 @  16.4.2007,  21:46 Найти цитируемый пост)
нельзя хранить это в контейнерах STL

Это и не понадобится, stl контейнеры сами работают с памятью, auto_ptr там не причем.
Цитата(Fazil6 @  16.4.2007,  21:46 Найти цитируемый пост)
 Семантика копирования у std::auto_ptr спецефическая

auto_ptr p1,p2;
выражение p1=p2 приводит к модификации правой части, в этом и выражается специфика.
здесь работает механизм передачи владельца, он призван ограничить количество указателей на
1н объект.
Когда такое поведение нежелательно (с трудом представляю себе когда оно может быть желательно)
ставят модификатор const. При передаче в функцию в ее сигнатуре объявляют как const &.
Другими словами применение const auto_ptr при объявлении указателей на объект и 
const auto_ptr & при объявлении в функции должно гарантировать отстствие любых "граблей".

Цитата(Fazil6 @  16.4.2007,  21:46 Найти цитируемый пост)
не менее важна. Сопровождение длится намного дольше чем разработка

Нууу, если твоя программа работает в 40% ситуаций, сопровождать ее будет сложнее, чем, скажем, покопаться в не столько
самопонятном коде раз в месяц.


JackYF, извини, но в твоем ответе нет ни одной причины почему не стоит его применять.
Про  boost::shared_ptr ничего не скажу, потому что этой библиотекой не пользовался.

ну на счет typedef'а. что-то он слишком ного внимания получает  smile 

typdef std::auto_ptr<ClassA> CLASSAAUTOPTR;
CLASSAAUTOPTR ptr(new ClassA);



PM MAIL   Вверх
Daevaorn
Дата 17.4.2007, 07:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 51
Всего: 70



Цитата(dizzy1984 @  17.4.2007,  07:04 Найти цитируемый пост)
Это и не понадобится, stl контейнеры сами работают с памятью, auto_ptr там не причем.

но auto_ptr нельзя положить в контейнер.
PM MAIL WWW   Вверх
Fazil6
Дата 17.4.2007, 12:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1653
Регистрация: 3.5.2006
Где: Минск

Репутация: 35
Всего: 60



Цитата(dizzy1984 @  17.4.2007,  06:04 Найти цитируемый пост)
Нууу, если твоя программа работает в 40% ситуаций, сопровождать ее будет сложнее, чем, скажем, покопаться в не столькосамопонятном коде раз в месяц.

ага... опять 25...
Кто Вам сказал, что правильность работы программы и читабельность ее - это вещи взаимоисключающие ? Код пишется в первую очередь не для компиллятора, а для человека, который будет читать его
PM MAIL   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0594 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.