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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 42, средняя оценка - 4.71
IvanPryamoy
247 / 1 / 1
Регистрация: 02.01.2013
Сообщений: 31
#1

Что означает двойное двоеточие в vector<int>::iterator it ? - C++

12.01.2013, 09:24. Просмотров 6636. Ответов 16
Метки нет (Все метки)

Никак не могу понять как взаимоувязаны две сущности: контейнеры и итераторы.

C++
1
vector<int>::iterator it;
Если бы это было определение функции шаблона класса "vector" или слева от "iterator it" стояло бы пространство имен, то было бы понятно. Но подобного синтаксиса я понять не могу.

Какова взаимная структура двух сущностей, что это требует подобного синтаксиса?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.01.2013, 09:24
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Что означает двойное двоеточие в vector<int>::iterator it ? (C++):

Что означает двойное двоеточие в коде - C++
Что в с++ значит вот это ::

Нюансы синтаксиса: что означает запись vector<int*> a и vector <int>*a ? - C++
Часто встречается вот такая запись: vector&lt;int&gt; a; это понятно что. Массив объектов int А вот что такое vector&lt;int*&gt; a; ...

Что означает конструкция vector<int> v1{ 5 }; ? - C++
Доброй ночи) Что означает данная конструкция? (Гуглю не могу найти инфы) 1) vector&lt;int&gt; v1{ 5 }; 2) vector &lt;vector&lt;int&gt; &gt; v2(n +...

Std::vector<std::pair<std::vector<int>::iterator, std::vector<int>::iterator> - C++
Вопрос по вектору. Допустим есть вектор, std::vector&lt;int&gt; vec; на каком - то этапе заполнения я ставлю закладку итератора, ...

Error LNK2019: unresolved external symbol "public: __thiscall Vector<int>::Vector<int>(int,int,int)" (?0?$Vec - C++
Вот есть заголовочный файл // Заголовочный файл Vector.h #ifndef VECTOR_H #define VECTOR_H #include &lt;iostream&gt; using...

Поясните пожалуйста что означает двоеточие и то что идет после него - C++
В 4 строчке после параметра в скобочках нету &quot;;&quot; или же тела функции, что не сходится с моим шаблоном в голове. Поясните пожалуйста что...

16
Croessmah
Пришел
Эксперт CЭксперт С++
13565 / 7716 / 873
Регистрация: 27.09.2012
Сообщений: 18,998
Записей в блоге: 3
Завершенные тесты: 1
12.01.2013, 09:32 #2
Scope Resolution Operator
1
Kastaneda
Jesus loves me
Эксперт С++
4703 / 2907 / 239
Регистрация: 12.12.2009
Сообщений: 7,406
Записей в блоге: 2
Завершенные тесты: 1
12.01.2013, 09:33 #3
Знакомо понятие "вложенный класс" ? Это оно и есть, поэтому и нужен оператор ::.
Пример
C++
1
2
3
4
5
6
7
8
9
10
class A
{
public:
   class B{};
};
 
int main()
{
   A::B ob; // создаем переменную класса В, вложенного в класс А
}
2
IvanPryamoy
247 / 1 / 1
Регистрация: 02.01.2013
Сообщений: 31
12.01.2013, 10:16  [ТС] #4
Цитата Сообщение от Kastaneda Посмотреть сообщение
Знакомо понятие "вложенный класс" ? Это оно и есть, поэтому и нужен оператор ::.
Пример
C++
1
2
3
4
5
6
7
8
9
10
class A
{
public:
   class B{};
};
 
int main()
{
   A::B ob; // создаем переменную класса В, вложенного в класс А
}
Я так и догадывался

Нашел, что этот фокус- покус (двойное двоеточие) применим при любых новых типах, определенных в классе. Например с помощью ключевого слова "typedef"
0
fasked
Эксперт С++
4957 / 2537 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
12.01.2013, 19:30 #5
Цитата Сообщение от IvanPryamoy Посмотреть сообщение
при любых новых типах, определенных в классе
Дело не в типе.
0
IvanPryamoy
247 / 1 / 1
Регистрация: 02.01.2013
Сообщений: 31
12.01.2013, 21:35  [ТС] #6
Цитата Сообщение от fasked Посмотреть сообщение
Дело не в типе.
Сказал "А"- говори "Б"
0
0x10
2512 / 1690 / 255
Регистрация: 24.11.2012
Сообщений: 4,237
12.01.2013, 21:43 #7
Цитата Сообщение от IvanPryamoy Посмотреть сообщение
Сказал "А"- говори "Б"
Уже было сказано выше, по ссылке на msdn. Цитирую:
:: identifier
class-name :: identifier
namespace :: identifier

По-русски можно обозвать "оператор разрешения области видимости". Первая строчка - явное обращение к идентификатору в глобальной области видимости. Вторая и третья - внутри класса и пространства имен соответственно. Ключевое слово - идентификатор. И это не обязательно тип.
0
go
Эксперт С++
3586 / 1366 / 129
Регистрация: 16.04.2009
Сообщений: 4,528
19.01.2013, 15:39 #8
Цитата Сообщение от IvanPryamoy Посмотреть сообщение
Сказал "А"- говори "Б"
Это оператор разрешения. Если совсем просто, то в примере Kastaneda есть вложенный класс. Так первый класс для него выполняет своеобразное пространство имен.
0
kovalexius
1 / 1 / 0
Регистрация: 10.10.2014
Сообщений: 7
10.10.2014, 20:15 #9
Вопрос посложнее. (насчет оператора расширения видимости и не только)
Что означает это:
C++
1
2
3
4
struct S{};
void main() 
{ 
  int S::*ptm;
0
alsav22
5429 / 4824 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
10.10.2014, 20:23 #10
Указатель на поле типа int, структуры S.
0
kovalexius
1 / 1 / 0
Регистрация: 10.10.2014
Сообщений: 7
10.10.2014, 20:31 #11
Поподробней можно?

Добавлено через 3 минуты
структура то пустая.
А если непустая даже то все равно не понимаю смысла.
Если "Указатель на поле типа int" то указатель на какое поле?
На любое типа int структуры S?
0
alsav22
5429 / 4824 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
10.10.2014, 20:50 #12
Цитата Сообщение от kovalexius Посмотреть сообщение
Поподробней можно? Добавлено через 3 минуты
структура то пустая.
А если непустая даже то все равно не понимаю смысла.
Если "Указатель на поле типа int" то указатель на какое поле?
На любое типа int структуры S?
Вот так понятно?
C++
1
int* ptm;
Где int? Какой int? Неважно, прсто указатель на тип int. Так же и здесь, только указатель на:
Цитата Сообщение от kovalexius Посмотреть сообщение
На любое типа int структуры S?
Потом ему можно будет присвоить адрес конкретного поля int, структуры S.

Добавлено через 4 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
    struct S
    {
        int a;
        int b;
    
    };
 
    int S::*ptm;
    ptm = &S::a;
    S s;
    s.*ptm = 3; // a = 3;
    ptm = &S::b;
    s.*ptm = 4; // b = 4;
0
kovalexius
1 / 1 / 0
Регистрация: 10.10.2014
Сообщений: 7
10.10.2014, 20:58 #13
Ясно, спасибо!
0
alsav22
5429 / 4824 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
10.10.2014, 21:11 #14

Не по теме:

Цитата Сообщение от kovalexius Посмотреть сообщение
Ясно, спасибо!
Сасибо не булькает...


Вот один из примеров применения:
Как передать в функцию указание работы с конкретным полем структуры?
0
kovalexius
1 / 1 / 0
Регистрация: 10.10.2014
Сообщений: 7
10.10.2014, 21:32 #15
Я понял.
Еще одно проявление т.н. "статического полиморфизма" можно сотворить. Этот указатель по идее как бы частичный - он указывает на определенное поле любого экземпляра (проще говоря смещение поля относительно начала объекта). А для доступа к конкретному полю используется как бы недостающая часть - указатель (неявный this, - то что "s." или "edata[i]." в примере по ссылке) на конкретный объект, агрегирующий в себе определенное поле.
0
10.10.2014, 21:32
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.10.2014, 21:32
Привет! Вот еще темы с ответами:

Что означает двоеточие в наследовании конструктора? - C++
При изучении ООП в рамках языка c++ столкнулся с интересной формой обьявления конструктора объекта: classname(int A, int B, int C) :...

error LNK2019: ссылка на неразрешенный внешний символ "public: __thiscall Vector<int>::Vector<int>(void)" (?0?$Vector@H@@QAE@XZ) в функции _main - C++
//Vector.h #include &lt;iostream&gt; #include &lt;Windows.h&gt; #include &lt;climits&gt; #include &lt;vector&gt; #include &lt;stdlib.h&gt; #include &lt;fstream&gt;...

Как можно увеличить размер вектора, который является элементом вектора vector<vector<int>>arr(n, vector <int>) - C++
Написал программу, которая создает вектор 'а' векторов 'b', вектора 'b' содержат 2 числа. Стало интересно, как нужно изменить программу...

Что означает эта строка? int _tmain(int argc, _TCHAR* argv[]) - C++
Всем привет, до этого пользовался DEV, решил пересесть на Visual Studio 2010 Express C++. С++ еще не изучал, хочу сначала добить &quot;С&quot;. ...


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

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

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