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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблемы с динамической памятью, нужна помощь 
V
    Опции темы
Mayk
Дата 20.2.2006, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


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

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



Цитата(Hyps @ 20.2.2006, 16:52 Найти цитируемый пост)
я смотрел у вас раздел книги, там 2 для себя отметил (Bjarne Stroustrup, The C++ Language: Third Edition, Special и Роберт Седжвик "Фундаментальные алгоритмы на C++"), но не знаю насколько они подойдут...
хочу приобрести Герберт Шилдт, Полный справочник по С++, твое мнение?

не читал, не знаю. но не думаю, чтобы их прочтение повредило.

Советую поискать хорошую (толстую) книжку по STL. С ним разрабатывать классы подобные ::vector'у из первых сообщений значительно проще.


Цитата(Hyps @ 20.2.2006, 16:52 Найти цитируемый пост)

зззы ... и я все равно не понимаю зачем делать нужны ссылки и const здесь
vector& /*<-- здесь тоже ссылка*/ operator= (const vector& a);
ведь без них и так все работает.... да и посмыслу как то не понятно получется

Если ты здесь не сделаешь ссылку/указатель, то сюда передастся копия объекта. А если она не будет изменяться, то передавать копию - расточительная операция (представь, придется скопировать 500.000 double'ов только для того, чтобы их просто считать). Ссылка передается константной потому что передаваемый вектор не должен быть изменён.
возвращается ссылка, чтобы можно было делать что-то типа a=b=c. Иногда полезно. Иногда необходимо.


Цитата(Hyps @ 20.2.2006, 16:52 Найти цитируемый пост)

зы а sts::copy работает с двойными массивами ...

с двойными - нет. В том смысле, что
Код

        int a[10][10];
        int b[10][10];
        std::copy(a, a+10,b);

вызовет ошибку компиляции. Хотя если представить их как одинарные, то работает.
Код

        int a[10][10];
        int b[10][10];
        std::copy(&a[0][0], &a[0][0]+sizeof(a)/sizeof(int),&b[0][0]);


кстати, с двойными векторами работает лучше.
Код

        std::vector< std::vector<int> > a;
        std::vector< std::vector<int> > b;
///инициаилизация пропущена, 
/// тут много букв по созданию векторов a и b одинаковых размерностей
        std::copy(a.begin(),a.end(),b.begin());


Цитата(Hyps @ 20.2.2006, 16:52 Найти цитируемый пост)

работает с ... собственными типами данных?

ага, если они поддерживает у них есть подходящий operator=
(либо определенный самостоятельно, либо созданный компилятором).
В этом кстати его прелесть. Как и других ф-ций из STL - они способны работать с абсолютно любыми типами, если те удовлетворяют необходимыми условиями.


Цитата(Hyps @ 20.2.2006, 16:52 Найти цитируемый пост)
програмист-самоучка и не всегда понимаю че вы мудреные профессионалы

ну некоторые из нас(я например) тут не меньшие самоучки smile

Это сообщение отредактировал(а) Mayk - 20.2.2006, 13:41


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
Hyps
Дата 20.2.2006, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



а если я сделаю так:
Код

  int rows=10,columns=10;
  double **a;
  double **b;
  a=new double* [rows];
  for (int i=0;i<rows;i++) a[i]=new double [columns];

  b=new double* [rows];
  for (int i=0;i<rows;i++) b[i]=new double [columns];

  for (int i=0;i<rows;i++)
    for (int k=0;k<columns;k++)
      if (i==k) a[i][k]=1; else a[i][k]=10;

  std::copy (*b,*b + rows, *a);
  for (int i=0;i<rows;i++) std::copy (b[i],b[i] + columns, a[i]);


это нормально?
PM MAIL   Вверх
Hyps
Дата 20.2.2006, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



ладно, я все проверил, всем спасибо за помощь
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
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.3173 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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