М
МишаҚар. 13, 2017, 4: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, 4: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, 5:01 Т.Қ.

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

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

      Что за....

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

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

          М
          • Қар. 13, 2017, 5:24 Т.Қ.

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

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

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

                М
                • Қар. 13, 2017, 5:30 Т.Қ.

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

                  Evgenii Legotckoi
                  • Қар. 13, 2017, 5:33 Т.Қ.

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

                    Evgenii Legotckoi
                    • Қар. 13, 2017, 5:33 Т.Қ.

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

                      М
                      • Қар. 13, 2017, 5:37 Т.Қ.

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

                        М
                        • Қар. 13, 2017, 5:40 Т.Қ.

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

                          Evgenii Legotckoi
                          • Қар. 13, 2017, 5: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, 5:54 Т.Қ.
                            • (өңделген)

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

                              BlinCT
                              • Қар. 13, 2017, 5:59 Т.Қ.

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

                                М
                                • Қар. 13, 2017, 6:01 Т.Қ.

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

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

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

                                    BlinCT
                                    • Қар. 13, 2017, 6:08 Т.Қ.

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

                                      М
                                      • Қар. 13, 2017, 6:11 Т.Қ.

                                      спасибо

                                        Пікірлер

                                        Тек рұқсаты бар пайдаланушылар ғана пікір қалдыра алады.
                                        Кіріңіз немесе Тіркеліңіз
                                        Ua

                                        Qt - Тест 001. Сигналы и слоты

                                        • Нәтиже:84ұпай,
                                        • Бағалау ұпайлары4
                                        Ua

                                        Qt - Тест 001. Сигналы и слоты

                                        • Нәтиже:42ұпай,
                                        • Бағалау ұпайлары-8
                                        ОК

                                        Qt - Тест 001. Сигналы и слоты

                                        • Нәтиже:47ұпай,
                                        • Бағалау ұпайлары-6
                                        Соңғы пікірлер
                                        ИМ
                                        Игорь МаксимовҚар. 22, 2024, 9:51 Т.Қ.
                                        Django - Оқулық 017. Теңшелген Django кіру беті Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
                                        Evgenii Legotckoi
                                        Evgenii LegotckoiҚаз. 31, 2024, 11:37 Т.Қ.
                                        Django - Сабақ 064. Python Markdown кеңейтімін қалай жазуға болады Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup
                                        A
                                        ALO1ZEҚаз. 19, 2024, 5:19 Т.Қ.
                                        Qt Creator көмегімен fb3 файл оқу құралы Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
                                        ИМ
                                        Игорь МаксимовҚаз. 5, 2024, 4:51 Т.Қ.
                                        Django - Сабақ 064. Python Markdown кеңейтімін қалай жазуға болады Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
                                        d
                                        dblas5Шілде 5, 2024, 8:02 Т.Қ.
                                        QML - Сабақ 016. SQLite деректер қоры және онымен QML Qt-та жұмыс істеу Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
                                        Енді форумда талқылаңыз
                                        f
                                        firstlunoxodАқп. 15, 2025, 1:46 Т.Қ.
                                        Рисование на QGraphicsScene при зажатой кнопке мыши Подскажите, пожалуйста! Как данный класс можно дополнить, чтобы созданные объекты можно было перемещать мышкой по сцене?
                                        Дмитрий
                                        ДмитрийАқп. 3, 2025, 4:24 Т.Қ.
                                        Создание deb-пакета. Как создать ярлык на рабочем столе после установки собственного deb-пакета? Всем привет. Сделал свой deb-пакет с программой. Всё устанавливается и работает. Ставлю по пути /usr/bin/my_application. Как для пользователя при установке пакета сразу создать ярлык на раб…
                                        NW
                                        Nayo WaiҚаң. 30, 2025, 7:22 Т.Қ.
                                        не запускается компьютер!!! Не запускается компьютер (точнее работает блок , но сам монитор вообще жесть)В общем я ничего с интернета не скачивала в последнее время. На компе никаких левых пр…
                                        n
                                        nklyҚаң. 3, 2025, 12:52 Т.Қ.
                                        Нужно запретить перемещение только некоторых итемов, остальные перемещать можно. Вопрос решен. Узнать QModelIndex элемента на который мы перетаскиваем другой элемент, можно с помощью функции indexAt(event->position().toPoint()) представления QTreeViev вызываемой в переопр…
                                        M
                                        MarselТам. 17, 2023, 12:26 Т.Ж.
                                        OAuth2.0 через VK, получение email Спасибо большое за помощь и простите за то что отнял время своей невнимательностью.

                                        Бізді әлеуметтік желілерде бақылаңыз