С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
Другие темы раздела
C++ Сортировка односвязного списка В условии задачи нужно считать из файла неопределенное количество студентов и занести их в односвязный список. Отсортировать по изучаемому языку и вывести на экран. Вроде бы написал, но в сортировке есть проблемы, она зацикливается. #include <iostream> #include <fstream> #include <string> using namespace std; https://www.cyberforum.ru/ cpp-beginners/ thread1260148.html C++ Вычислительная ошибка при малом шаге
Всем привет. Только начинаю изучать с++. В общем, нужно написать программу. Вот она: "Вычислить и вывести на экран в виде таблицы значения функции, заданной графически (из лабораторной работы №1, вариант остаётся прежним) на интервале от Х1 до Х2 с шагом dx. Интервал и шаг задать таким образом, чтобы проверить все ветви программы. Таблицу снабдить заголовком и шапкой." Программу я написал...
C++ Как сделать блок схему? https://www.cyberforum.ru/ cpp-beginners/ thread1260121.html
Как сделать блок схему? #include<iostream.h> #include<conio.h> int s=0; void main() { clrscr(); for(int i=1;i<5;i++) { if(i%3==0)
C++ Блок-схема Помогите сделать блок схему по коду #include<iostream> using namespace std; void main() { float z,y,x; system("cls"); cout<<"Enter x="; cin>>x; cout<<"Enter y="; https://www.cyberforum.ru/ cpp-beginners/ thread1260120.html
Анализатор команд C++
помогите написать анализатор команд на с++
C++ Блок-схема по коду программы https://www.cyberforum.ru/ cpp-beginners/ thread1260117.html
Нужно сделать блок схему #include<iostream.h> #include<conio.h> #include<math.h> int x,y; void main() { clrscr(); cout<<"Enter x=";
C++ Блок-схема к программе https://www.cyberforum.ru/ cpp-beginners/ thread1260115.html
Нужно сделать блок схему к программе #include<iostream.h> #include<conio.h> #include<math.h> float y,x; const float p=3.1415926; void main() { clrscr();
C++ Необходима библиотека для работы с векторными форматами
Здравствуйте! По ходу деятельности мне стало необходимо работать с векторными изображениями. К сожалению, поиск дает очень мало результатов. Какие существуют удобные библиотеки для работы (не только рендеринга) с векторными изображениями (желательно, svg)? Добавлено через 3 минуты Вопрос закрыт. Libboard (GNU LGPL).
C++ После выполнения программы, работающей с динамической памятью, вылетает ошибка https://www.cyberforum.ru/ cpp-beginners/ thread1260095.html
при компиляции вылетает ошибка (не может обратиться к private gолям next, val) err: C2248 если поля поместить в public, то прога компилится, но вылетает сообщение после вывода очереди: expression: _BLOCK_TYPE_IS_VALID(pHead->nBlockUse) line 52 dbgdel.cpp файл linkedlist.h template <class T> class List { private: class node //Класс node содержит данные списка
C++ Указатель на указатели (1.Удалить элемент по ключу из списка, 2.удалить весь список) https://www.cyberforum.ru/ cpp-beginners/ thread1260091.html
Вот моя программа и осталось сделать эти две функции и у меня не выходит текст программы: main.cpp #include <QCoreApplication> #include <malloc.h> #include <iostream> #include "type.h" #include "dop_func.h" using namespace std;
C++ Не получается создавать рандомные числа
Вот мой код программы #include <iostream> #include <stdlib.h> using namespace std; int i; int main() { for(i=0;i<10;i++) { cout<<rand()%100<<endl;
C++ Настройка Visual C++ 2010. Как создать пустой проект? https://www.cyberforum.ru/ cpp-beginners/ thread1260085.html
Скачал себе MVC++ 2010, сделал в ней 2 проекта, все норм, потом походу что то наклацал в настройках, и теперь при каждом новом срр файле требует прописывать перед кодом #include"StdAfx.h" хотя раньше и без него работало нормально.
Эксперт С++
8972 / 4318 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
01.03.2015, 17:47 0

Распространенные ошибки - C++ - Ответ 7286463

01.03.2015, 17:47. Показов 395725. Ответов 73
Метки (Все метки)

Ответ

Ошибки связанные с итераторами (кэширование размера контейнера).

Такие ошибки обычно проявляются собственно по прямому назначению итераторов:
в пробегах по циклам.

Рассмотрим примеры:
C++
1
for ( auto i = vec.begin(); i != vec.end(); ++i ) { ... }
C++
1
2
const auto e = vec.end();
for ( auto i = vec.begin(); i != e; ++i ) { ... }
Какой способ работает быстрее?

На самом деле - 2й способ, потому что в первом случае на каждом шаге цикла
каждый раз заново рассчитывается размер контейнера.

Особенно это критично для контейнеров, чей размер долго рассчитывается.

Между новичками бытует миф,
якобы компилятор самостоятельно умеет оптимизировать расчеты в условии цикла.

Ну так вот это - не правда. И ниже я объясню почему.

В книгах для новичков существует рекомендация:
самостоятельно закэшировать размер в виде константы,
что бы потом не высчитывать его каждый раз заново.

Ошибка новичка здесь: если он попытается закэшировать размер контейнера,
а потом в теле цикла добавит/удалит элемент.

В худшем случае это приведет к некорректному поведению программы:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <vector>
 
using namespace std;
 
int main()
{
    vector <int> vec( 2, 2 ); 
 
    auto e = vec.end(); // <--- закэшировали конечное значение
 
    // --- мы хотим бежать по всему контейнеру
    for ( auto it = vec.begin(); it != e; ++it )
        if ( *it == 2 )
            vec.insert( it, 3 ); // <--- сколько раз будет осуществлена вставка?
 
    for ( auto i : vec )
        std::cout << i << ", ";
    std::cout << '\n';
}
В лучшем, получаем крэш:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <vector>
 
using namespace std;
 
int main()
{
    vector <int> vec( 5, 5 );
 
    auto e = vec.end(); // <--- закэшировали конечное значение
 
    // --- мы хотим бежать по всему контейнеру
    for ( auto it = vec.begin(); it != e; ++it )
        if ( *it == 5 )
            vec.erase( it ); 
}
В общем случае, компилятор может оптимизировать только константы в условии цикла.
Но он не оптимизирует мутабельную переменную,
именно потому, что в теле цикла эти переменные могут быть изменены.

В лучшем случае компилятор может оптимизировать и мутабельную переменную,
при условии, что в теле цикла ему доступна вся полнота информации,
и он может гарантировать, что её оптимизация не нарушит логику работы цикла.

Вернуться к обсуждению:
Распространенные ошибки C++
3
Заказать работу у эксперта
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.03.2015, 17:47
Готовые ответы и решения:

Вывести самые распространенные женские и мужские имена
Помогите решить задачу пожалуйста! Написать программу, которая формирует файл записей данной...

Вывести самые распространенные мужские и женские имена
Имеется массив записей о студентах, каждая из которых включает поля: фамилия, имя, отчество, пол,...

Ошибки после компиляции на Visual Express 2012.Ошибки в теме
Добрый вечер ребят помогите пожалуйста.Программа написана на Visual Express 2012.Обясните что...

Распространенные ошибки
Оглавление Ошибки этапа компиляции (В процессе компиляции выдается либо сообщение об ошибке,...

73
01.03.2015, 17:47
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.03.2015, 17:47
Помогаю со студенческими работами здесь

безопасность и распространенные ошибки
Тут наткнулся на очень интересные тексты: http://werad.narod.ru/articles/programm6.html ...

безопасность и распространенные ошибки
Тут наткнулся на очень интересные тексты: http://werad.narod.ru/articles/programm6.html ...

Распространенные ошибки SEO и ASP.NET 2.0
Здравствуйте, существуют несколько СЕО проблем при использовании ASP.NET, ниже я опишу эти...

Самые распространенные строки
type Mytype = record name:string; surname:string; end; var Students:Mytype; ...

Самые распространённые фамилии
Здравствуйте! Для реализации автоподстановки фамилии нужно как-то выявить, например, 1 (10, 15,...

Распространённые схемы мошейничества с вайбером
Использовался старый кнопочный телефон. Схема: - в одном из телеграмм чатов предложили...

Самые распространенные мужское и женское имена
Здрасти всем. Помогите справиться с решением задачи. Во входном файле записана следующая...

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru