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

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

Войти
Регистрация
Восстановить пароль
 
__sirroko
4 / 4 / 3
Регистрация: 03.03.2013
Сообщений: 55
#1

Работа с STL vector - C++

26.04.2014, 11:19. Просмотров 793. Ответов 2
Метки нет (Все метки)

Добрый день!

Прошу объяснить следующие моменты связанные с <vector> (почему ругается студия,
откуда берутся такие результаты) и дать совет, как стоить изменить перегруженные операторы [].

I.
C++
1
2
3
4
5
6
7
8
9
10
11
std::vector<int> vector;
//...
int& CVector::operator[](const int index) const
{
  return vector[index];
}
 
int& CVector::operator[](const int index)
{
  return vector[index];
}
Для const-метода тудия сообщает о такой ошибке:
IntelliSense: отброшены квалификаторы в ссылке, привязывающей тип "int &" к инициализатору типа "const int"
c:\Users\sirroko\Documents\Visual Studio 2013\Projects\OOP\lab2\CVector.cpp 29 10 lab2


II.
Попробовал переписать const-метод следующим образом:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
std::vector<int> vector;
//...
CVector::CVector(const CVector& obj)
{
  for (int i = 0; i < obj.vector.size(); i++) {
    vector.push_back(obj.vector[i]);
  }
}
//...
int& CVector::operator[](const int index) const
{
  int t = vector[index];
  return t;
}
 
int& CVector::operator[](const int index)
{
  return vector[index];
}
Студия молчит, но в конструкторе копирования vector заполняется следующим образом (при условии, что obj.vector содерижт два элемента: 1, 2).

obj {vector={ size=2 } } const CVector &
vector { size=2 } std::vector<int,std::allocator<int> >
[size] 2 int
[capacity] 2 int
[0] 1 int
[1] 2 int


this 0x002cf888 {vector={ size=2 } } CVector *
vector { size=2 } std::vector<int,std::allocator<int> >
[size] 2 int
[capacity] 2 int
[0] -858993460 int
[1] -858993460 int



III.
Если обращаться в конструкторе копирования к obj.vector[i] (в обход переопределенных мной []),
то все работает отлично.
C++
1
2
3
4
5
6
CVector::CVector(const CVector& obj)
{
  for (int i = 0; i < obj.vector.size(); i++) {
    vector.push_back(obj.vector[i]);
  }
}
this 0x002ffc9c {vector={ size=2 } } CVector *
vector { size=2 } std::vector<int,std::allocator<int> >
[size] 2 int
[capacity] 2 int
[0] 1 int
[1] 2 int


obj {vector={ size=2 } } const CVector &
vector { size=2 } std::vector<int,std::allocator<int> >
[size] 2 int
[capacity] 2 int
[0] 1 int
[1] 2 int


Заранее спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.04.2014, 11:19
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Работа с STL vector (C++):

Работа с STL. Поменять vector на list - C++
Программа должна быть написана так, чтобы достаточно было заменить в одном месте vector на list и приложение делало все то же самое. Если...

Работа с векторами без использования STL и библиотеки <vector> - C++
Здравствуйте Уважаемые формучане. Подскажите пожалуйста, есть ли смысл писать свой собственный класс Vector если из него всё равно будет...

vector STL - C++
class data { public: char path; char net; char metric; int number; // для укаания строки таблици }; class vertex

STL vector iterator - C++
есть список в списке... ..точнее: vector &lt;Class1*&gt; mapClass1; а уже в Class1 определён вектор vector &lt;Class2*&gt; mapClass2; ...

STL vector,list - C++
У меня 2 вопроса: 1) можете рассказать,как подробно работает reverse_iterator?Создал вектор,хочу его распечатать в обратном порядке...

STL. Map, vector. Строки - C++
Здравствуйте. Почти не знаком с STL. Имеется вектор строк. Нужно найти частоту использования каждой буквы. Я уже который...

2
0x10
2480 / 1655 / 248
Регистрация: 24.11.2012
Сообщений: 4,102
26.04.2014, 11:22 #2
const-метод должен возвращать копию значения или ссылку на константу.
0
__sirroko
4 / 4 / 3
Регистрация: 03.03.2013
Сообщений: 55
26.04.2014, 11:58  [ТС] #3
Т.е. так? Да, это работает...
C++
1
2
3
4
const int& CVector::operator[](const int index) const
{
  return vector[index];
}
Почему const дает такой эффект?..

И еще вот что странно. Изначально вместо <vector> я использовал обычный int-массив, но такого поведения как в I и II не было.

Вот как было изначально.
C++
1
2
3
4
5
6
7
8
9
10
11
int * vector = new int[count];
//...
int& CVector::operator[](const int index) const
{
  return vector[index];
}
 
int& CVector::operator[](const int index)
{
  return vector[index];
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.04.2014, 11:58
Привет! Вот еще темы с ответами:

stl::vector, метод pop_back() - C++
Доброго времени суток! Вот такой вопрос: я создаю объект в куче: someClass *test = new someClass();

Обработка STL контейнера vector - C++
Текст дан в виде вектора. Отсортировать элементы этого вектора и превратить на два списка так, чтобы в первом были только те элементы,...

STL обращение к элементу vector - C++
Помогите исправить ошибку. #include &lt;iostream&gt; #include &lt;vector&gt; using namespace std; class otschet { public: double...

STL vector index operator - C++
что такое индекс оператор у контейнера вектор ??? по заданию надо задать доступ к произвольному элементу у в вектору использую индекс...


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

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

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