М
МишаNov. 13, 2017, 5:35 a.m.

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

QVector

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

 QVector<double>*Open1= new QVector<double>;    Open1->append(18); Open1->append(20); Open1->append(23); qDebug() <<  Open1[0];
We recommend hosting TIMEWEB
We recommend hosting TIMEWEB
Stable hosting, on which the social network EVILEG is located. For projects on Django we recommend VDS hosting.

Do you like it? Share on social networks!

19
BlinCT
  • Nov. 13, 2017, 5:57 a.m.

Что значит в разные?
Если вы хотите по порядку закидывать в вектор то лучше юзать 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;
    }
    М
    • Nov. 13, 2017, 6:01 a.m.

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

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

      Что за....

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

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

          М
          • Nov. 13, 2017, 6:24 a.m.

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

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

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

                М
                • Nov. 13, 2017, 6:30 a.m.

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

                  Evgenii Legotckoi
                  • Nov. 13, 2017, 6:33 a.m.

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

                    Evgenii Legotckoi
                    • Nov. 13, 2017, 6:33 a.m.

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

                      М
                      • Nov. 13, 2017, 6:37 a.m.

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

                        М
                        • Nov. 13, 2017, 6:40 a.m.

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

                          Evgenii Legotckoi
                          • Nov. 13, 2017, 6:52 a.m.
                          • (edited)

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


                          Всё правильно он вам выводит... память выделена в куче. с оператором [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
                            • Nov. 13, 2017, 6:54 a.m.
                            • (edited)

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

                              BlinCT
                              • Nov. 13, 2017, 6:59 a.m.

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

                                М
                                • Nov. 13, 2017, 7:01 a.m.

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

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

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

                                    BlinCT
                                    • Nov. 13, 2017, 7:08 a.m.

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

                                      М
                                      • Nov. 13, 2017, 7:11 a.m.

                                      спасибо

                                        Comments

                                        Only authorized users can post comments.
                                        Please, Log in or Sign up
                                        d
                                        • dsfs
                                        • April 26, 2024, 2:56 p.m.

                                        C ++ - Test 004. Pointers, Arrays and Loops

                                        • Result:80points,
                                        • Rating points4
                                        d
                                        • dsfs
                                        • April 26, 2024, 2:45 p.m.

                                        C++ - Test 002. Constants

                                        • Result:50points,
                                        • Rating points-4
                                        d
                                        • dsfs
                                        • April 26, 2024, 2:35 p.m.

                                        C++ - Test 001. The first program and data types

                                        • Result:73points,
                                        • Rating points1
                                        Last comments
                                        k
                                        kmssrFeb. 9, 2024, 5:43 a.m.
                                        Qt Linux - Lesson 001. Autorun Qt application under Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
                                        Qt WinAPI - Lesson 007. Working with ICMP Ping in Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
                                        EVA
                                        EVADec. 25, 2023, 9:30 p.m.
                                        Boost - static linking in CMake project under Windows Ошибка LNK1104 часто возникает, когда компоновщик не может найти или открыть файл библиотеки. В вашем случае, это файл libboost_locale-vc142-mt-gd-x64-1_74.lib из библиотеки Boost для C+…
                                        J
                                        JonnyJoDec. 25, 2023, 7:38 p.m.
                                        Boost - static linking in CMake project under Windows Сделал всё по-как у вас, но выдаёт ошибку [build] LINK : fatal error LNK1104: не удается открыть файл "libboost_locale-vc142-mt-gd-x64-1_74.lib" Хоть убей, не могу понять в чём дел…
                                        G
                                        GvozdikDec. 19, 2023, 8:01 a.m.
                                        Qt/C++ - Lesson 056. Connecting the Boost library in Qt for MinGW and MSVC compilers Для решения твой проблемы добавь в файл .pro строчку "LIBS += -lws2_32" она решит проблему , лично мне помогло.
                                        Now discuss on the forum
                                        PS
                                        Peter SonMay 4, 2024, 3:57 a.m.
                                        Best Indian Food Restaurant In Cincinnati OH Ready to embark on a gastronomic journey like no other? Join us at App india restaurant and discover why we're renowned as the Best Indian Food Restaurant In Cincinnati OH . Whether y…
                                        Evgenii Legotckoi
                                        Evgenii LegotckoiMay 3, 2024, 12:07 a.m.
                                        Мобильное приложение на C++Qt и бэкенд к нему на Django Rest Framework Добрый день. По моему мнению - да, но то, что будет касаться вызовов к функционалу Андроида, может создать огромные трудности.
                                        IscanderChe
                                        IscanderCheApril 30, 2024, 2:22 p.m.
                                        Во Flask рендер шаблона не передаётся в браузер Доброе утро! Имеется вот такой шаблон: <!doctype html><html> <head> <title>{{ title }}</title> <link rel="stylesheet" href="{{ url_…
                                        G
                                        GarApril 22, 2024, 3:46 p.m.
                                        Clipboard Как скопировать окно целиком в clipb?
                                        Павел Дорофеев
                                        Павел ДорофеевApril 14, 2024, 12:35 p.m.
                                        QTableWidget с 2 заголовками Вот тут есть кастомный QTableView с многорядностью проект поддерживается, обращайтесь

                                        Follow us in social networks