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

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

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

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

26.04.2014, 11:19. Просмотров 653. Ответов 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


Заранее спасибо!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.04.2014, 11:19     Работа с STL vector
Посмотрите здесь:

Работа с 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,list - C++
У меня 2 вопроса: 1) можете рассказать,как подробно работает reverse_iterator?Создал вектор,хочу его распечатать в обратном порядке...

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

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

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

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

stl sort vector не сортирует ?! - C++
class Playlist { private: std::vector&lt;Song&gt; s_container; public: Playlist() { s_container=std::vector&lt;Song&gt;(); } ...

STL vector запись в файл - C++
Здраствуйте! Такая проблема, есть у меня например vector чисел 1,2,3,4,5 надо записать их в файл. Если записываю так, то выбивает ошибка...

Stl vector, не резервирует память - C++
vector не резервирует память и не вставляет элемент std::vector&lt;int&gt; myVector; myVector.reserve(10); ...

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


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
0x10
2459 / 1631 / 238
Регистрация: 24.11.2012
Сообщений: 4,009
26.04.2014, 11:22     Работа с STL vector #2
const-метод должен возвращать копию значения или ссылку на константу.
__sirroko
4 / 4 / 3
Регистрация: 03.03.2013
Сообщений: 55
26.04.2014, 11:58  [ТС]     Работа с STL vector #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];
}
Yandex
Объявления
26.04.2014, 11:58     Работа с STL vector
Ответ Создать тему
Опции темы

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