Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
adamo86
2 / 2 / 0
Регистрация: 10.04.2011
Сообщений: 185
#1

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

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

Ребят, объясните пожалуйста следующие строчки кода. Что происходит в результате их выполнения?
C++
1
2
int a[4] = {10, 20, 30, 40};
vector<int> v(a, a+4);
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.08.2011, 11:51
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Доскональный разбор кода C++ (C++):

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

Разбор кода - C++
Нужно разобрать код. не могу понять что тут выполняется, кроме открытия файлов #include &lt;iostream&gt; #include &lt;fstream&gt; ...

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

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

Комментарии и разбор кода - C++
#include &quot;stdafx.h&quot; #include &quot;tchar.h&quot; #include &quot;iostream&quot; #include &quot;string&quot; #include &quot;math.h&quot; #include &quot;conio.h&quot; using...

Подробный разбор кода - C++
#include &lt;stdlib.h&gt; #include &lt;iostream&gt; #include &lt;algorithm&gt; typedef int (*inc_method)(char *, char *, char *, char *); int...

16
neske
1502 / 869 / 84
Регистрация: 26.03.2010
Сообщений: 2,983
27.08.2011, 11:59 #2
В первой строке создаем целочисленный массив размером 4 и сразу его заполняем.
Во второй строке создаем целочисленный вектор и инициализируем его ранее созданным массивом - http://www.cplusplus.com/reference/stl/vector/vector/
1
adamo86
2 / 2 / 0
Регистрация: 10.04.2011
Сообщений: 185
27.08.2011, 12:02  [ТС] #3
Цитата Сообщение от adamo86 Посмотреть сообщение
vector<int> v(a, a+4);
Мне интересно как происходит инициализация вектора v? Что значит первый параметр в скобках? И что значит второй параметр скобках?
0
diagon
Higher
1930 / 1196 / 49
Регистрация: 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
asics
Freelance
Эксперт С++
2848 / 1783 / 144
Регистрация: 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
neske
1502 / 869 / 84
Регистрация: 26.03.2010
Сообщений: 2,983
27.08.2011, 12:05 #6
Все элементы массива в памяти расположены последовательно.
a - указатель на первый элемент массива,
a + 4 - в данном примере указатель на следующую ячейку, после последней.

Вот конструктор и принимает два указателя. Пример по ссылке выше.
vector ( InputIterator first, InputIterator last, const Allocator& = Allocator() );
2
adamo86
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
Kastaneda
Нарушитель
Эксперт С++
4676 / 2880 / 234
Регистрация: 12.12.2009
Сообщений: 7,314
Записей в блоге: 2
Завершенные тесты: 1
27.08.2011, 12:49 #8
Получается, что копируется диапазон [a; a+4)
Надеюсь чем отличается квадратная скобка от круглой объяснять не надо)
2
adamo86
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
soon
2542 / 1307 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
27.08.2011, 15:11 #10
касательно substr - клик
касательно c_str() - клик2
1
Thinker
Эксперт С++
4227 / 2201 / 150
Регистрация: 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
adamo86
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
LosAngeles
Заблокирован
27.08.2011, 16:30 #13
этот ничем не отличается, а вот если бы вместо double был бы string к примеру, то сначала кажись должен конструтор по умолчанию вызваться, а потом только оператор присваивания в теле конструктора, что не есть гуд, когда можно оператор копирования замутить прямо в списке инициализации
1
adamo86
2 / 2 / 0
Регистрация: 10.04.2011
Сообщений: 185
27.08.2011, 16:35  [ТС] #14
Цитата Сообщение от LosAngeles Посмотреть сообщение
этот ничем не отличается, а вот если бы вместо double был бы string к примеру, то сначала кажись должен конструтор по умолчанию вызваться, а потом только оператор присваивания в теле конструктора, что не есть гуд, когда можно оператор копирования замутить прямо в списке инициализации
Я не совсем понял. Нельзя ли как-то на примерах показать?
0
LosAngeles
Заблокирован
27.08.2011, 16:40 #15
У тебя отладчик есть? В vs помоему на f11 жмёшь это Trace into набери два конструктора со string и посмотри сам разницу
1
27.08.2011, 16:40
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.08.2011, 16:40
Привет! Вот еще темы с ответами:

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

Разбор кода программы - C++
сделали контрольную и защитить не не могу. помогите разобрать что значит код, пожалуйста. реализация LZ метода сжатия кто может...

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

Разбор строчек небольшого кода - C++
Помогите разобрать каждую строку ( что она делает - описание ) #include &lt;iostream&gt; using namespace std; int main(){ unsigned...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru