Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/18: Рейтинг темы: голосов - 18, средняя оценка - 4.78
2 / 2 / 0
Регистрация: 10.04.2011
Сообщений: 185
1

Доскональный разбор кода C++

27.08.2011, 11:51. Показов 3729. Ответов 16
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Ребят, объясните пожалуйста следующие строчки кода. Что происходит в результате их выполнения?
C++
1
2
int a[4] = {10, 20, 30, 40};
vector<int> v(a, a+4);
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.08.2011, 11:51
Ответы с готовыми решениями:

Разбор кода
Нужно разобрать код. не могу понять что тут выполняется, кроме открытия файлов #include...

Разбор кода
Здравствуйте! Подскажите, пожалуйста, что обозначает вот это Utf8_16::utf8 Utf8_16::k_Boms зачем...

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

Разбор кода C++
Объясните пожалуйста как работает этот код. Особенно строки 10-12 и 18. int transf() { int...

16
1552 / 918 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
27.08.2011, 11:59 2
В первой строке создаем целочисленный массив размером 4 и сразу его заполняем.
Во второй строке создаем целочисленный вектор и инициализируем его ранее созданным массивом - http://www.cplusplus.com/refer... or/vector/
1
2 / 2 / 0
Регистрация: 10.04.2011
Сообщений: 185
27.08.2011, 12:02  [ТС] 3
Цитата Сообщение от adamo86 Посмотреть сообщение
vector<int> v(a, a+4);
Мне интересно как происходит инициализация вектора v? Что значит первый параметр в скобках? И что значит второй параметр скобках?
0
Higher
1953 / 1219 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
27.08.2011, 12:02 4
C++
1
int a[4] = {10, 20, 30, 40};
Массив размером в 4 элемента инициализируется списком.

C++
1
vector<int> v(a, a+4);
Вектор инициализуется вышеприведенным массивом. Точнее тупо копирует все, что находиться между a и a + 4(a - указатель на первый элемент массива, а так как элементы в массиве располагаются последовательно, то a + 4 указывает на элемент, следующий за 4м элементом массива).
1
Freelance
Эксперт С++
2891 / 1826 / 356
Регистрация: 09.09.2010
Сообщений: 3,841
27.08.2011, 12:05 5
Цитата Сообщение от adamo86 Посмотреть сообщение
Мне интересно как происходит инициализация вектора v?
Вызываеться такой конструктор:
C++
1
2
3
4
5
6
7
8
9
template<typename _InputIterator>
        vector(_InputIterator __first, _InputIterator __last,
           const allocator_type& __a = allocator_type())
    : _Base(__a)
        {
      // Check whether it's an integral type.  If so, it's not an iterator.
      typedef typename std::__is_integer<_InputIterator>::__type _Integral;
      _M_initialize_dispatch(__first, __last, _Integral());
    }
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
template<typename _InputIterator>
        void
        _M_initialize_dispatch(_InputIterator __first, _InputIterator __last,
                   __false_type)
        {
      typedef typename std::iterator_traits<_InputIterator>::
        iterator_category _IterCategory;
      _M_range_initialize(__first, __last, _IterCategory());
    }
 
      // Called by the second initialize_dispatch above
      template<typename _InputIterator>
        void
        _M_range_initialize(_InputIterator __first,
                _InputIterator __last, std::input_iterator_tag)
        {
      for (; __first != __last; ++__first)
        push_back(*__first);
    }
mingw 4.6.0
1
1552 / 918 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
27.08.2011, 12:05 6
Все элементы массива в памяти расположены последовательно.
a - указатель на первый элемент массива,
a + 4 - в данном примере указатель на следующую ячейку, после последней.

Вот конструктор и принимает два указателя. Пример по ссылке выше.
vector ( InputIterator first, InputIterator last, const Allocator& = Allocator() );
2
2 / 2 / 0
Регистрация: 10.04.2011
Сообщений: 185
27.08.2011, 12:33  [ТС] 7
Цитата Сообщение от diagon Посмотреть сообщение
Вектор инициализуется вышеприведенным массивом. Точнее тупо копирует все, что находиться между a и a + 4(a - указатель на первый элемент массива, а так как элементы в массиве располагаются последовательно, то a + 4 указывает на элемент, следующий за 4м элементом массива).
Я не пойму. Если "между", то a, то есть первый элемент массива не должен был копироваться, ведь a+4 не копируется. Получается a включительно копируется.
0
5231 / 3204 / 362
Регистрация: 12.12.2009
Сообщений: 8,116
Записей в блоге: 2
27.08.2011, 12:49 8
Получается, что копируется диапазон [a; a+4)
Надеюсь чем отличается квадратная скобка от круглой объяснять не надо)
2
2 / 2 / 0
Регистрация: 10.04.2011
Сообщений: 185
27.08.2011, 15:05  [ТС] 9
Необходимо разобраться в следующем коде:
C++
1
2
3
4
5
6
7
    string s = "1234567890";
    vector<int> a;
    for (int i=(int)s.length(); i>0; i-=9)
        if (i < 9)
            a.push_back (atoi (s.substr (0, i).c_str()));
        else
            a.push_back (atoi (s.substr (i-9, 9).c_str()));
1) Что делать 5 строка в общем?
2) Что из себя представляет функция substr()? Какие параметры ей передаются?
0
2554 / 1319 / 178
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
27.08.2011, 15:11 10
касательно substr - клик
касательно c_str() - клик2
1
Эксперт С++
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
27.08.2011, 15:13 11
Цитата Сообщение от diagon Посмотреть сообщение
Точнее тупо копирует все, что находиться между a и a + 4(a - указатель на первый элемент массива, а так как элементы в массиве располагаются последовательно, то a + 4 указывает на элемент, следующий за 4м элементом массива).
Добавлю про a+4. Если к переменной-указателю прибавляется 1, то ее значение увеличивается на количество байт данного типа, поэтому при a+4 к a добавляется 4*sizeof(a) байт
1
2 / 2 / 0
Регистрация: 10.04.2011
Сообщений: 185
27.08.2011, 16:17  [ТС] 12
Необходимо разобраться в следующем коде:
C++
1
2
3
4
5
6
7
8
9
10
class Point {
public:
  double x;
  double у;
};
 
Point::Point (double _х, double _y):
   х (), у ()
{
}
Мне не понятен этот конструктор (строка 7). Точнее понятен, что происходит инициализация переменных класса Point - x и y. Но чем отличается это конструктор от следующего:
C++
1
2
3
4
5
Point::Point (double _х, double _y)
{
x = _x;
    у = _y;
}
0
Заблокирован
27.08.2011, 16:30 13
этот ничем не отличается, а вот если бы вместо double был бы string к примеру, то сначала кажись должен конструтор по умолчанию вызваться, а потом только оператор присваивания в теле конструктора, что не есть гуд, когда можно оператор копирования замутить прямо в списке инициализации
1
2 / 2 / 0
Регистрация: 10.04.2011
Сообщений: 185
27.08.2011, 16:35  [ТС] 14
Цитата Сообщение от LosAngeles Посмотреть сообщение
этот ничем не отличается, а вот если бы вместо double был бы string к примеру, то сначала кажись должен конструтор по умолчанию вызваться, а потом только оператор присваивания в теле конструктора, что не есть гуд, когда можно оператор копирования замутить прямо в списке инициализации
Я не совсем понял. Нельзя ли как-то на примерах показать?
0
Заблокирован
27.08.2011, 16:40 15
У тебя отладчик есть? В vs помоему на f11 жмёшь это Trace into набери два конструктора со string и посмотри сам разницу
1
2554 / 1319 / 178
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
27.08.2011, 16:42 16

Сабж: Роберт Лафоре "В теле конструктора, как правило, производятся более сложные вещи, чем инициализация. "
Где-то я слышал, что инициализация, типа Num(0) быстрее, чем в теле конструктора. Хотя, возможно, я ошибаюсь.
1
Заблокирован
27.08.2011, 16:43 17
C++
1
2
3
4
5
6
7
8
9
10
11
12
Point::Point (string _х, string _y):
   х (), у () //Сразу конструктор копирования вызывается
{
}
 
Point::Point (string _х, string _y) 
{
//Конструкторы по умолчанию
//Операторы присваивания
  x = _x;
  у = _y;
}
1
27.08.2011, 16:43
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.08.2011, 16:43
Помогаю со студенческими работами здесь

Разбор кода
Есть такой код. #include&lt;vcl.h&gt; #pragma hdrstop #pragma argsused #include &lt;dos.h&gt; #include...

разбор кода
здрасте ,помогите разобрать код,пожалуйста int a = 5; int b = 0; int &amp;r = a; ...

Разбор кода CSharp
К сожалению с сями не знаком!(( Что знаю по коду. То он из *.dat файла выдергивает нужные данные....

Разбор кода программы
Здравствуйте! Помогите пожалуйста написать программу (на Bison+Flex), которая будет сканировать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru