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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 42, средняя оценка - 4.71
IvanPryamoy
247 / 1 / 1
Регистрация: 02.01.2013
Сообщений: 31
12.01.2013, 09:24     Что означает двойное двоеточие в vector<int>::iterator it ? #1
Никак не могу понять как взаимоувязаны две сущности: контейнеры и итераторы.

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

Какова взаимная структура двух сущностей, что это требует подобного синтаксиса?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11830 / 6809 / 769
Регистрация: 27.09.2012
Сообщений: 16,883
Записей в блоге: 2
Завершенные тесты: 1
12.01.2013, 09:32     Что означает двойное двоеточие в vector<int>::iterator it ? #2
Scope Resolution Operator
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
12.01.2013, 09:33     Что означает двойное двоеточие в vector<int>::iterator it ? #3
Знакомо понятие "вложенный класс" ? Это оно и есть, поэтому и нужен оператор ::.
Пример
C++
1
2
3
4
5
6
7
8
9
10
class A
{
public:
   class B{};
};
 
int main()
{
   A::B ob; // создаем переменную класса В, вложенного в класс А
}
IvanPryamoy
247 / 1 / 1
Регистрация: 02.01.2013
Сообщений: 31
12.01.2013, 10:16  [ТС]     Что означает двойное двоеточие в vector<int>::iterator it ? #4
Цитата Сообщение от Kastaneda Посмотреть сообщение
Знакомо понятие "вложенный класс" ? Это оно и есть, поэтому и нужен оператор ::.
Пример
C++
1
2
3
4
5
6
7
8
9
10
class A
{
public:
   class B{};
};
 
int main()
{
   A::B ob; // создаем переменную класса В, вложенного в класс А
}
Я так и догадывался

Нашел, что этот фокус- покус (двойное двоеточие) применим при любых новых типах, определенных в классе. Например с помощью ключевого слова "typedef"
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
12.01.2013, 19:30     Что означает двойное двоеточие в vector<int>::iterator it ? #5
Цитата Сообщение от IvanPryamoy Посмотреть сообщение
при любых новых типах, определенных в классе
Дело не в типе.
IvanPryamoy
247 / 1 / 1
Регистрация: 02.01.2013
Сообщений: 31
12.01.2013, 21:35  [ТС]     Что означает двойное двоеточие в vector<int>::iterator it ? #6
Цитата Сообщение от fasked Посмотреть сообщение
Дело не в типе.
Сказал "А"- говори "Б"
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
12.01.2013, 21:43     Что означает двойное двоеточие в vector<int>::iterator it ? #7
Цитата Сообщение от IvanPryamoy Посмотреть сообщение
Сказал "А"- говори "Б"
Уже было сказано выше, по ссылке на msdn. Цитирую:
:: identifier
class-name :: identifier
namespace :: identifier

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

Добавлено через 3 минуты
структура то пустая.
А если непустая даже то все равно не понимаю смысла.
Если "Указатель на поле типа int" то указатель на какое поле?
На любое типа int структуры S?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
10.10.2014, 20:50     Что означает двойное двоеточие в vector<int>::iterator it ? #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;
kovalexius
0 / 0 / 0
Регистрация: 10.10.2014
Сообщений: 7
10.10.2014, 20:58     Что означает двойное двоеточие в vector<int>::iterator it ? #13
Ясно, спасибо!
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
10.10.2014, 21:11     Что означает двойное двоеточие в vector<int>::iterator it ? #14

Не по теме:

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


Вот один из примеров применения:
Как передать в функцию указание работы с конкретным полем структуры?
kovalexius
0 / 0 / 0
Регистрация: 10.10.2014
Сообщений: 7
10.10.2014, 21:32     Что означает двойное двоеточие в vector<int>::iterator it ? #15
Я понял.
Еще одно проявление т.н. "статического полиморфизма" можно сотворить. Этот указатель по идее как бы частичный - он указывает на определенное поле любого экземпляра (проще говоря смещение поля относительно начала объекта). А для доступа к конкретному полю используется как бы недостающая часть - указатель (неявный this, - то что "s." или "edata[i]." в примере по ссылке) на конкретный объект, агрегирующий в себе определенное поле.
DrOffset
6429 / 3803 / 882
Регистрация: 30.01.2014
Сообщений: 6,601
10.10.2014, 21:42     Что означает двойное двоеточие в vector<int>::iterator it ? #16
kovalexius, совершенно верно. Именно поэтому его можно передавать в качестве аргумента шаблона.
C++
1
2
template <typename T, int T::* F>
void foo(T * p);
Этот указатель известен на этапе компиляции.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.10.2014, 22:32     Что означает двойное двоеточие в vector<int>::iterator it ?
Еще ссылки по теме:

C++ Error LNK2019: unresolved external symbol "public: __thiscall Vector<int>::Vector<int>(int,int,int)" (?0?$Vec
C++ Что означает двоеточие в наследовании конструктора?
Как можно увеличить размер вектора, который является элементом вектора vector<vector<int>>arr(n, vector <int>) C++

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

Или воспользуйтесь поиском по форуму:
kovalexius
0 / 0 / 0
Регистрация: 10.10.2014
Сообщений: 7
10.10.2014, 22:32     Что означает двойное двоеточие в vector<int>::iterator it ? #17
А вот контрактная функция, принимающая указание
C++
1
2
3
4
5
6
7
8
template<class T, class U>
void EditData( T *edata, U T::*field, const U& value )
{
    for(int i = 0; i < NUM; i++)
    {
        edata[i].*field = value; 
    }
}
Инициализирует поле значением value

Применение:
C++
1
2
DATA *datas = new DATA[NUM];
EditData< DATA, string >( datas, &DATA::x1, string("1234") );
Yandex
Объявления
10.10.2014, 22:32     Что означает двойное двоеточие в vector<int>::iterator it ?
Ответ Создать тему
Опции темы

Текущее время: 12:00. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru