Реклама

QVector c неуказанным количеством элементов

QVector

При такой записи все данные записываются в [0] элемент вектора. Как Записывать все не в один, а в разные элементы?

 QVector<double>*Open1= new QVector<double>;    Open1->append(18); Open1->append(20); Open1->append(23); qDebug() <<  Open1[0];
  • #
  • 13 ноября 2017 г. 16:57

Что значит в разные?
Если вы хотите по порядку закидывать в вектор то лучше юзать push_back хотя и append работает.
Попробуйте этот код, у вас должно работать

    QVector<double> *Open1= new QVector<double>;
    Open1->push_back(2.5);
    Open1->push_back(4.6);
    Open1->append(5.3);

    for (int i = 0; i <= Open1->size(); ++i)
    {
        std::cout << Open1->at(i) << std::endl;
    }

Тоже в 0 ячейку записывает.

Скажите пожалуйста, std::vector вычисляются быстрее, нежели QVector?

Что за....

Если вы в куче выделяете память через new, то следующее даже работать не будет как требуется
qDebug() <<  Open1[0];
Я уже говорил вам, что если память выделена в куче, то нужно использовать метод at()
qDebug() <<  Open1->at(0);
Далее, если Вам не нравится, что запись ведётся в ячейку 0, то Вам придётся с этим смириться , поскольку ни одному опытному программисту не понравится, когда он увидит, что под индексом 0 находится мусор, потому, что вам не нравится считать с 0.
При такой записи все данные записываются в [0] элемент вектора
Может перефразируете? при таком способе записи информации в 0 элемент добавляется только первый добавленный элемент, а остальные добавляются по порядку.
 
В общем вы делаете проблему на пустом месте. Никто так не пишет, как вы хотите.

Так вы не хотите писать в 0 ячейку? Это что то странное. Если вы запишите в 1 ячейку то что у вас будет в 0 ячейке?
Вот подумайте и скажите.

Я думал писать по очереди, сначала в 0, затем в 1, затем в 2

append или push_back так и делают. пишут по порядку.
Понятия не имею, что вы творите в своём коде, что у вас всё пишется в 0-й элемент.

посмотрите пример что я вам привел. Я добавляю элементы через push_back. Вы собрали его? Вы посмотрели вывод в консоли?
Видите что вам вывелось? Все элементы по порядку как и были добавленны. Это о чем говорит? О том что push_back добавлял с начала в 0 потом в 1 ячейку.

Я написал также , как  и вы. Очень странно выходит. Вот скрин, я не вру.

У тебя там в коде Out of Range. Сам тоже скомпилируй что написал в Debug сборке. Проверку на выход за размер вектора в цикле неправильно написал.

А вы всё-таки приложите скриншот.

Извиняюсь, не приложился сразу

А правда, что при работе с большими объёмами памяти  QVector пораждает баги?

  • Миша
  • #
  • отредактировано 13 ноября 2017 г. 17:52
  • 13 ноября 2017 г. 17:52

При кривых руках баги пораждаются чаще.


Всё правильно он вам выводит... память выделена в куче. с оператором [0] будет указатель на объект QVector, который выведет всю информацию о вектора и всех его трёх элементах... А не конкретно на первый элемент QVector.

Сколько раз мне ещё повторить вам, чтобы до вас дошло, что если выделяете память в куче, то доступ к элементам надо делать через метод at()?

QVector<double>*Open1= new QVector<double>;   
Open1->append(18); 
Open1->append(20); 
Open1->append(23); 

qDebug() <<  Open1->at(0);
  • Миша
  • #
  • отредактировано 13 ноября 2017 г. 17:55
  • 13 ноября 2017 г. 17:54

И вообще... без особой надобности никто не выделяет память через метод new для QVector или std::vector

0 в вашем случаи это начало вектора которое содержит все элементы.
Вам же выше написали, чтоыб получить инфу по конкретному элементу надо через at() делать.

Да, так заработало. Спасибо.

А вы при больших объемах данных работаете с std::vector или QVector?

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

По факту это одно и тоже.
разница в том что QVector это вектор переработанный для совместимости с другими отьектами и методами Qt.
Он имеет почти теже самые методы что и стандартный вектор std::vector
Если пишите проект на Qt то используете свой вектор.
Если пишите например консольное приложение без использования Qt то юзаете стандартный.

спасибо

Реклама

Ответы

Только авторизованные пользователи могут отвечать на форуме.
Пожалуйста, Авторизуйтесь или Зарегистрируйтесь

C++ - Тест 004. Указатели, Массивы и Циклы

  • Результат 50 баллов
  • Очки рейтинга -4

C++ - Тест 004. Указатели, Массивы и Циклы

  • Результат 80 баллов
  • Очки рейтинга 4

C++ - Тест 001. Первая программа и типы данных

  • Результат 6 баллов
  • Очки рейтинга -10
Последние комментарии

QML - Урок 002. Custom Button in QML Android

Нашел http://doc.qt.io/Qt-5/qtquickcontrols2-customize.html#customizing-button

QML - Урок 002. Custom Button in QML Android

А как кастомайзить Button если использовать QtQuick.Controls 2.0 ? В этом случае пишет Cannot assign to non-existent property "style"

  • EVILEG
  • 15 ноября 2017 г. 13:56

Qt/C++ - Урок 072. Пример векторного редактора на Qt

You need add common QWidget to form, after that you need right-click on this QWidget in the form and select "Promote to..." in Context Menu. After that You will see dialog. In dialog choose Ba...

  • cordsac
  • 15 ноября 2017 г. 3:33

Qt/C++ - Урок 072. Пример векторного редактора на Qt

Sir,In this form design how did you add verectanglesettings.ui,vepolylinesettings.ui UI's to this mainwindow.ui ? have any QT tool to add so. this image shows what I meaning.

Сейчас обсуждают на форуме
  • Docent
  • 21 ноября 2017 г. 19:39

Видео на сцене QGraphicsScene, как правильно сделать?

Ситуация такая: имеется область в памяти в которую пишутся кадры с камеры. Каким наиболее оптимальным образом отобразить их на сцене. У меня это реализовано таким образом, но подозреваю что мо...

Многопоточность. Ошибки при обращении к переменной

Не будет вызываться, оно вызывается ниже по коду. Но какая разница в каком классе хранить данные, если в этой функции я только их выгружаю. Но можно ли все таки выгружать данные из ...

как отключить событие при открытии формы?

как обойти проблему: см. комментарий кода - может кто подскажет. TableView { id: table model: tableModel anchors.fill: parent focus: true Component.onComple...

  • EVILEG
  • 21 ноября 2017 г. 14:40

QGraphicsItem конструктор с параметрами

За что именно отвечают x_c , y_c ? Это положение объекта на графической сцене? Тогда лучше не в методе paint их применять, а через метод setPo...

  • EVILEG
  • 21 ноября 2017 г. 1:36

QGraphicsItem

Я так понимаю, вы каким-то образом передаёте указатель на отрисовываемый текст, то есть на QString. Но лучше добавить переменную в объявление класса, которая будет отвечать за текст, и п...