Russian Qt Forum
Ноябрь 25, 2024, 03:22 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 [2] 3   Вниз
  Печать  
Автор Тема: QMap и масив  (Прочитано 14502 раз)
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #15 : Февраль 16, 2016, 10:27 »

Я только читаю данные с бинарников ничего туда не пишу.
Или я Вас неправильно понял?
Пожалуйста, а как это соотносится с хранением данных?
Вы пытаетесь засунуть их в обычный массив, этот массив в map, а где будете хранить размерности массивов?
А я предлагаю это объединить в отдельную сущность с удобными методами их использования.
Записан
shadow
Гость
« Ответ #16 : Февраль 16, 2016, 11:37 »

Я только читаю данные с бинарников ничего туда не пишу.
Или я Вас неправильно понял?
Пожалуйста, а как это соотносится с хранением данных?
Вы пытаетесь засунуть их в обычный массив, этот массив в map, а где будете хранить размерности массивов?
А я предлагаю это объединить в отдельную сущность с удобными методами их использования.
Ну размеры массивов я знаю перед добавлением в словарь.
А вообще получилось спасибо!

Код:
class FileData
{
public:   
    FileData();
    void LoadKvdopData(float **arr,int Row,int Col);   
    void RetKvdopData(float **arr,int Row,int Col); 
    ~FileData();
private:
    bool isKvdopExist;
    float **Kvdop;
};
filedata.cpp
Код:
#include <QDebug>
#include "filedata.h"
FileData::FileData()
{
isKvdopExist=false;
}
void FileData::LoadKvdopData(float **arr,int Row,int Col)
{
    Kvdop = new float*[Row];
    for (int i = 0; i < Row; i++)
        Kvdop[i]  = new float [Col];

    for (int i = 0; i < Row; i++)
        for (int j = 0; j < Col; j++)
            Kvdop[i][j]=arr[i][j];
    //memcpy(Kvdop,arr,Row*Col);
    isKvdopExist=true;
}
void FileData::RetKvdopData(float **arr,int Row,int Col)
{
    if (isKvdopExist){
    for (int i = 0; i < Row; i++)
        for (int j = 0; j < Col; j++)
            arr[i][j]=Kvdop[i][j];
    //memcpy(arr,Kvdop,Row*Col);
    }else
     qDebug()<<"Массив не создан!";
}

Хочу вместо цикла использовать memcpy но программа вываливается... в чем может быть проблема?
Или по производительности это будет то-же самое?
« Последнее редактирование: Февраль 16, 2016, 12:00 от shadow » Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #17 : Февраль 16, 2016, 12:08 »

Хочу вместо цикла использовать memcpy но программа вываливается... в чем может быть проблема?
У Вас каждая строка распределена отдельно, поэтому memcpy не прокатит.

Вы сделали "косметический ремонт", старые си-шные массивы-то остались, Вы будете продолжать разбивать о них ноги (массив создан! Ах нет, не создан). Вот Вам заготовочка в аттаче. Если я где ошибся - подправите. Также избегайте всяких QMap::value() и др методов возвращающих ПО ЗНАЧЕНИЮ (не слушайте если будут рассказывать что, мол, в Qt так можно и.т.п.)


Записан
shadow
Гость
« Ответ #18 : Февраль 16, 2016, 12:26 »

Цитировать
У Вас каждая строка распределена отдельно, поэтому memcpy не прокатит.
Не понял, там и там указатель, память выделена.

Цитировать
Вы сделали "косметический ремонт" , старые си-шные массивы-то остались
Но массивы теперь динамические?

Аттач посмотрел...
Ну мне чтобы это понять еще надо подтянуть матчасть....
« Последнее редактирование: Февраль 16, 2016, 12:28 от shadow » Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #19 : Февраль 16, 2016, 12:38 »

Не понял, там и там указатель, память выделена.
Указатель на что (тип) ?
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #20 : Февраль 16, 2016, 13:14 »

Также избегайте всяких QMap::value() и др методов возвращающих ПО ЗНАЧЕНИЮ (не слушайте если будут рассказывать что, мол, в Qt так можно и.т.п.)
если в словарь складывать указатели, то можно и value()
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
shadow
Гость
« Ответ #21 : Февраль 16, 2016, 13:36 »

Не понял, там и там указатель, память выделена.
Указатель на что (тип) ?
На float.
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #22 : Февраль 16, 2016, 13:56 »

На float.
А если повнимательнее Улыбающийся на какой тип указывает Kvdop?
Записан
shadow
Гость
« Ответ #23 : Февраль 16, 2016, 15:38 »

На float.
А если повнимательнее Улыбающийся на какой тип указывает Kvdop?
На  указатель? Указатель на указатель.
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #24 : Февраль 16, 2016, 16:26 »

Да. Давайте для упрощения будем называть Kvdop массивом указателей (на float).
Теперь смотрите на memcpy. Эта функция копирует информацию из массива А в массив Б.
Как мы видим, в массиве Kvdop хранятся указатели. Значит что мы копируем? Верно, указатели вместо желаемых float.

Но это полбеды. Вы в memcpy передаёте количество элементов, которое хотите скопировать, а на самом деле она ожидает количество байт подлежащие копированию.


Функция memcpy, конечно же, мощная, но она потенциально опасная. Поэтому, если у вас нет острой необходимости в повышении скорости, то от неё лучше отказаться.
Очень советую обратить внимание на замечания Old.
Если бы передо мной стояла такая задача, то я бы написал класс матрицы, либо воспользовался готовым извне.
Записан
shadow
Гость
« Ответ #25 : Февраль 16, 2016, 16:31 »

Да. Давайте для упрощения будем называть Kvdop массивом указателей (на float).
Теперь смотрите на memcpy. Эта функция копирует информацию из массива А в массив Б.
Как мы видим, в массиве Kvdop хранятся указатели. Значит что мы копируем? Верно, указатели вместо желаемых float.

Но это полбеды. Вы в memcpy передаёте количество элементов, которое хотите скопировать, а на самом деле она ожидает количество байт подлежащие копированию.


Функция memcpy, конечно же, мощная, но она потенциально опасная. Поэтому, если у вас нет острой необходимости в повышении скорости, то от неё лучше отказаться.
Очень советую обратить внимание на замечания Old.
Если бы передо мной стояла такая задача, то я бы написал класс матрицы, либо воспользовался готовым извне.

Спасибо за совет надо подумать...
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #26 : Февраль 16, 2016, 16:34 »

Я, кстати, так и не понял, почему вы QMap используете. В чём выгода?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #27 : Февраль 16, 2016, 16:37 »

Я, кстати, так и не понял, почему вы QMap используете. В чём выгода?
Нормально если каких-то массивов может не оказаться (напр не загрузились)
Записан
shadow
Гость
« Ответ #28 : Февраль 16, 2016, 17:36 »

Я, кстати, так и не понял, почему вы QMap используете. В чём выгода?
Ну я новичок. Может поэтому...Выгода в простоте для меня. QMap первым попался, может QVector лучше я пока не знаю. А вообще я выше писал, что раньше я писал структуру на диск... это напряжно и я захотел от этого избавится...обратился за помощью к джедаям..Улыбающийся

« Последнее редактирование: Февраль 16, 2016, 17:40 от shadow » Записан
shadow
Гость
« Ответ #29 : Февраль 16, 2016, 17:38 »

Я, кстати, так и не понял, почему вы QMap используете. В чём выгода?
Нормально если каких-то массивов может не оказаться (напр не загрузились)

Ненормально конечно.
Записан
Страниц: 1 [2] 3   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.219 секунд. Запросов: 22.