М
Миша13 ноября 2017 г. 5:35

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

QVector

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

 QVector<double>*Open1= new QVector<double>;    Open1->append(18); Open1->append(20); Open1->append(23); qDebug() <<  Open1[0];
Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

Вам это нравится? Поделитесь в социальных сетях!

19
BlinCT
  • 13 ноября 2017 г. 5: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;
    }
    М
    • 13 ноября 2017 г. 6:01

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

    Скажите пожалуйста, std::vector вычисляются быстрее, нежели QVector?
      Evgenii Legotckoi
      • 13 ноября 2017 г. 6:15

      Что за....

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

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

          М
          • 13 ноября 2017 г. 6:24

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

            Evgenii Legotckoi
            • 13 ноября 2017 г. 6:27
            append или push_back так и делают. пишут по порядку.
            Понятия не имею, что вы творите в своём коде, что у вас всё пишется в 0-й элемент.
              BlinCT
              • 13 ноября 2017 г. 6:30

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

                М
                • 13 ноября 2017 г. 6:30

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

                  Evgenii Legotckoi
                  • 13 ноября 2017 г. 6:33

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

                    Evgenii Legotckoi
                    • 13 ноября 2017 г. 6:33

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

                      М
                      • 13 ноября 2017 г. 6:37

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

                        М
                        • 13 ноября 2017 г. 6:40

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

                          Evgenii Legotckoi
                          • 13 ноября 2017 г. 6:52
                          • (ред.)

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


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

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

                          QVector<double>*Open1= new QVector<double>;   
                          Open1->append(18); 
                          Open1->append(20); 
                          Open1->append(23); 
                          
                          qDebug() <<  Open1->at(0);
                            Evgenii Legotckoi
                            • 13 ноября 2017 г. 6:54
                            • (ред.)

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

                              BlinCT
                              • 13 ноября 2017 г. 6:59

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

                                М
                                • 13 ноября 2017 г. 7:01

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

                                А вы при больших объемах данных работаете с std::vector или QVector?
                                  Evgenii Legotckoi
                                  • 13 ноября 2017 г. 7:04

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

                                    BlinCT
                                    • 13 ноября 2017 г. 7:08

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

                                      М
                                      • 13 ноября 2017 г. 7:11

                                      спасибо

                                        Комментарии

                                        Только авторизованные пользователи могут публиковать комментарии.
                                        Пожалуйста, авторизуйтесь или зарегистрируйтесь
                                        e
                                        • ehot
                                        • 31 марта 2024 г. 21:29

                                        C++ - Тест 003. Условия и циклы

                                        • Результат:78баллов,
                                        • Очки рейтинга2
                                        B

                                        C++ - Тест 002. Константы

                                        • Результат:16баллов,
                                        • Очки рейтинга-10
                                        B

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

                                        • Результат:46баллов,
                                        • Очки рейтинга-6
                                        Последние комментарии
                                        k
                                        kmssr9 февраля 2024 г. 2:43
                                        Qt Linux - Урок 001. Автозапуск Qt приложения под Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
                                        АК
                                        Анатолий Кононенко5 февраля 2024 г. 9:50
                                        Qt WinAPI - Урок 007. Работаем с ICMP Ping в Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
                                        EVA
                                        EVA25 декабря 2023 г. 18:30
                                        Boost - статическая линковка в CMake проекте под Windows Ошибка LNK1104 часто возникает, когда компоновщик не может найти или открыть файл библиотеки. В вашем случае, это файл libboost_locale-vc142-mt-gd-x64-1_74.lib из библиотеки Boost для C+…
                                        J
                                        JonnyJo25 декабря 2023 г. 16:38
                                        Boost - статическая линковка в CMake проекте под Windows Сделал всё по-как у вас, но выдаёт ошибку [build] LINK : fatal error LNK1104: не удается открыть файл "libboost_locale-vc142-mt-gd-x64-1_74.lib" Хоть убей, не могу понять в чём дел…
                                        G
                                        Gvozdik19 декабря 2023 г. 5:01
                                        Qt/C++ - Урок 056. Подключение библиотеки Boost в Qt для компиляторов MinGW и MSVC Для решения твой проблемы добавь в файл .pro строчку "LIBS += -lws2_32" она решит проблему , лично мне помогло.
                                        Сейчас обсуждают на форуме
                                        G
                                        Gar22 апреля 2024 г. 12:46
                                        Clipboard Как скопировать окно целиком в clipb?
                                        DA
                                        Dr Gangil Academics20 апреля 2024 г. 14:45
                                        Unlock Your Aesthetic Potential: Explore MSC in Facial Aesthetics and Cosmetology in India Embark on a transformative journey with an msc in facial aesthetics and cosmetology in india . Delve into the intricate world of beauty and rejuvenation, guided by expert faculty and …
                                        a
                                        a_vlasov14 апреля 2024 г. 13:41
                                        Мобильное приложение на C++Qt и бэкенд к нему на Django Rest Framework Евгений, добрый день! Такой вопрос. Верно ли следующее утверждение: Любое Android-приложение, написанное на Java/Kotlin чисто теоретически (пусть и с большими трудностями) можно написать и на C+…
                                        Павел Дорофеев
                                        Павел Дорофеев14 апреля 2024 г. 9:35
                                        QTableWidget с 2 заголовками Вот тут есть кастомный QTableView с многорядностью проект поддерживается, обращайтесь
                                        f
                                        fastrex4 апреля 2024 г. 11:47
                                        Вернуть старое поведение QComboBox, не менять индекс при resetModel Добрый день! У нас много проектов в которых используется QComboBox, в версии 5.5.1, когда модель испускает сигнал resetModel, currentIndex не менялся. В версии 5.15 при resetModel происходит try…

                                        Следите за нами в социальных сетях