4 / 3 / 0
Регистрация: 22.08.2014
Сообщений: 80

Пишу итератор произвольного доступа

09.10.2015, 21:06. Показов 2715. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пишу итератор произвольного доступа. По минимуму он должен поддерживать несколько операций, но меня смутила операция n+it, где n это целое число, а it это итератор. Для операции it+n всё понятно: там вызов преобразуется к
C++
1
 it.operator+(n)
А тут по логике должно быть наоборот, но int не класс, а примитивный тип, так что дружественную функцию не напишешь. О стандартных классовых обертках над примитивными типами я тоже не слышал. Если просто написать функцию с двумя аргументами (вне класса), то класс о ней вроде ничего знать не будет и не сможет вызвать, если придется. Как решение тут должно выглядеть?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.10.2015, 21:06
Ответы с готовыми решениями:

Детектировать итератор произвольного доступа
здравствуйте, нужно детектировать итератор произвольного доступа... это не работает: template< typename... > using void_t =...

Файл произвольного доступа
Здравствуйте, снова к файлам, такая задача. Допустим, у меня есть текстовый файл с данными - код, название, количество, и со значениями...

Файл произвольного доступа
Очень прошу помощи так как не могу с ними разобраться который день, видать делаю одну и ту же ошибку но не нахожу. Создаю свой класс и...

6
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
10.10.2015, 01:20
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
 
struct iterator{};
 
 
int operator+(int, const iterator&)
{
    return 1;
}
 
int main()
{
    std::cout << "Hello, world!\n";
    
    iterator i;
    
    std::cout<< 10+i<<std::endl;
}
1
4 / 3 / 0
Регистрация: 22.08.2014
Сообщений: 80
11.10.2015, 01:42  [ТС]
Так итератор же нужно возвращать, а не целое число. К тому же, если написать вот так:
C++
1
2
3
4
iterator & operator+(uint32_t val, iterator & it)
    {
        return it + val;
    }
То студия выдает ошибку: "слишком много параметров для этой функции оператора".
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
11.10.2015, 02:07
Цитата Сообщение от VergilYamato Посмотреть сообщение
Так итератор же нужно возвращать, а не целое число.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <iostream>
 
#ifndef OUT_STREAM
    #define OUT_STREAM(type_)     \
        template<class T>friend   \
        ::std::basic_ostream<T>&  \
        operator<<(::std::basic_ostream<T>& os, const type_& obj )
#endif
 
 
struct iterator
{
    iterator(int v=0):i(v){}
    
    OUT_STREAM(iterator)
    {
        return os<<"iterator(" << obj.i << ")";
    }
    
    iterator operator+(int v)const { return iterator(i+v); }
    
    int i;
};
 
 
iterator operator+(int v, const iterator& i)
{
    return i + v;
}
 
int main()
{
    std::cout << "Hello, world!\n";
    
    iterator i;
    
    std::cout<< 10 + i <<std::endl;
}
C++
1
2
3
4
iterator & operator+(uint32_t val, iterator & it)
    {
        return it + val;
    }
это - говнокод.
грамотный оператор+ возвращает по значению, а не ссылку.
отсюда и все ваши проблемы.
2
4 / 3 / 0
Регистрация: 22.08.2014
Сообщений: 80
12.10.2015, 14:34  [ТС]
Абсолютно та же ошибка, код один-в-один твой.
C++
1
2
3
4
iterator operator+(uint32_t val, const iterator &it)
{
    return it + val;
}
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
12.10.2015, 14:39
Лучший ответ Сообщение было отмечено VergilYamato как решение

Решение

VergilYamato, Может быть friend.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
 
class iterator
{
public:
   iterator operator + (int v) 
   {
      std::cout << "operator + (iterator, int)" << std::endl;
      return *this; 
   }
   friend iterator operator + (int v, const iterator& i) 
   {
      std::cout << "operator + (int, iterator)" << std::endl;
      return i; 
   }
};
 
int main()
{
   iterator i;
   iterator n = i + 10;
   iterator nn = 10 + i;
}
Хотя и вариант hoggy должен работать.
1
4 / 3 / 0
Регистрация: 22.08.2014
Сообщений: 80
12.10.2015, 14:57  [ТС]
Разобрался в чем дело: у меня
C++
1
iterator operator+(uint32_t val)
не был объявлен как const.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.10.2015, 14:57
Помогаю со студенческими работами здесь

Файл произвольного доступа
Читаю Дейтелов, про файлы произвольного доступа. Написал вроде как по примеру, но что-то идет не так. Идея такая - создается файл, в нем...

Создание файла произвольного доступа.
#include &lt;iostream.h&gt; #include &lt;fstream.h&gt; #include &lt;stdlib.h&gt; #define number 100 struct clientData { int acctNum; ...

Deque - сложность произвольного доступа
Тут написано: как так? Я привык считать, что дек - хранится двусвязным списком....

Создание файла произвольного доступа
Здравствуйте.Ни как не могу разобраться с файлами произвольного доступа.Но эта тема посвящена именно созданию таких файлов. #include...

Обработка файлов произвольного доступа
Создать файл, содержащий массив указателей на упорядоченные в алфавитном порядке строки, представленные записями переменной длины....


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

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

Новые блоги и статьи
Непрерывная интеграция для пакета Python
Mr. Docker 22.06.2025
Было 4 часа утра пятницы, когда я выпустил новую версию нашей внутренней библиотеки для обработки данных. Релиз 0. 5. 2 содержал небольшой фикс для обработки дат в ISO формате, что может пойти не так?. . .
Продвинутый ETL на C# из OLTP БД в хранилище
stackOverflow 22.06.2025
Работая в сфере корпоративной аналитики, я постоянно сталкиваюсь с одним и тем же - нужны чистые, структурированные и, главное, свежие данные. Без них современные аналитические системы, машинное. . .
Мастер-класс по микросервисам на Node.js
Reangularity 21.06.2025
Node. js стал одной из самых популярных платформ для микросервисной архитектуры не случайно. Его неблокирующая однопоточная модель и событийно-ориентированный подход делают его идеальным для. . .
Управление Arduino из WPF приложения
Wired 21.06.2025
Зачем вообще связывать Arduino с WPF-приложением? Казалось бы, у Arduino есть собственная среда разработки, своя экосистема, свои способы управления. Однако при создании серьезных проектов. . .
Звёздная пыль
kumehtar 20.06.2025
Я просто это себе представляю: как создавался этот мир. Как энергия слипалась в маленькие частички. Как они собирались в первые звёзды, как во вселенной впервые появился Свет. Как эти звёзды. . .
Создание нейросети с PyTorch
AI_Generated 19.06.2025
Ключевое преимущество PyTorch — его питоновская натура. В отличие от TensorFlow, который изначально был построен как статический вычислительный граф, PyTorch предлагает динамический подход. Это. . .
JWT аутентификация в ASP.NET Core
UnmanagedCoder 18.06.2025
Разрабатывая веб-приложения, я постоянно сталкиваюсь с дилеммой: как обеспечить надежную аутентификацию пользователей без ущерба для производительности и масштабируемости? Классические подходы на. . .
Краткий курс по С#
aaLeXAA 18.06.2025
Здесь вы найдете все необходимые функции чтоб написать програму на C# Задание 1: КЛАСС FORM 1 public partial class Form1 : Form { Spisok listin = new Spisok(); . . .
50 самых полезных примеров кода Python для частых задач
py-thonny 17.06.2025
Эффективность работы разработчика часто измеряется не количеством написаных строк, а скоростью решения задач. Готовые сниппеты значительно ускоряют разработку, помогают избежать типичных ошибок и. . .
C# и продвинутые приемы работы с БД
stackOverflow 17.06.2025
Каждый . NET разработчик рано или поздно сталкивается с ситуацией, когда привычные методы работы с базами данных превращаются в источник бессонных ночей. Я сам неоднократно попадал в такие ситуации,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru