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

Какой должен быть итератор для константной ссылки на вектор? - C++

Восстановить пароль Регистрация
 
BlackUser
2 / 2 / 0
Регистрация: 20.01.2014
Сообщений: 69
03.03.2014, 03:49     Какой должен быть итератор для константной ссылки на вектор? #1
Есть вектор, он передается в функцию так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <vector>
using namespace std;
 
void func(vector<int> arg) {
    for(vector<int>::iterator it=arg.begin(); it!=arg.end(); ++it)
        cout << *it << ' ';
    cout << endl;
}
 
int main () {
    int myints[] = { 1,2,3,4 };
    vector<int> myvector( myints, myints + sizeof(myints)/sizeof(int) );
    func(myvector);
    return 0;
}
в таком случае с итератором все понятно, но если аргумент - ссылка, то какой должен быть итератор? например:
C++
1
2
3
4
5
void func(const vector<int> & arg) {
    for(auto it=arg.begin(); it!=arg.end(); ++it) // какой должен быть итератор без использования переменной auto из стандарта c++11 ?
        cout << *it << ' ';
    cout << endl;
}
p.s. из отладчика вытащил такую конструкцию:
C++
1
_Vector_const_iterator<_Vector_val<int,allocator<int> > >
то есть можно задать итератор так:
C++
1
2
3
4
5
void func(const vector<int> & arg) {
    for(_Vector_const_iterator<_Vector_val<int,allocator<int> > > it=arg.begin(); it!=arg.end(); ++it)
        cout << *it << ' ';
    cout << endl;
}
но что-то мне подсказывает, что так нехорошо делать и вообще можно как-то проще?

аналогичная проблема для составления итератора для двумерного вектора, то есть для:
C++
1
const vector<vector<int>> & arg2
какой итератор для arg2.begin() ???

Добавлено через 5 минут
нашел решение, оказалось, что все совсем просто, вот может кому пригодится для константных итераторов:
C++
1
2
3
4
5
void func(const vector<int> & arg) {
    for(vector<int>::const_iterator it=arg.begin(); it!=arg.end(); ++it)
        cout << *it << ' ';
    cout << endl;
}
всего навсего меняется iterator на const_iterator и код работает.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.03.2014, 03:49     Какой должен быть итератор для константной ссылки на вектор?
Посмотрите здесь:

C++ В VC++ параметр const (_variant_t & data) непонятно какой должен быть
C++ В VC++ параметр const (_variant_t & data) непонятно какой должен быть
Какой тип должен быть у функции? C++
C++ Как определять какой метод должен быть статическим, а какой нет?
C++ Какой должен быть синтаксис для использования вложенного шаблонного класса?
Описать абстрактный класс породить от него еще два,один должен остаться абстрактным,другой должен быть способен пораждать объекты C++
C++ Какой должен быть прототип у оператора копирующего присваивания?
C++ Возврат константной ссылки из функции

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11838 / 6817 / 771
Регистрация: 27.09.2012
Сообщений: 16,911
Записей в блоге: 2
Завершенные тесты: 1
03.03.2014, 05:38     Какой должен быть итератор для константной ссылки на вектор? #2
Цитата Сообщение от BlackUser Посмотреть сообщение
но если аргумент - ссылка,
в данном случае всё дело не в ссылке, а в константности
Yandex
Объявления
03.03.2014, 05:38     Какой должен быть итератор для константной ссылки на вектор?
Ответ Создать тему
Опции темы

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