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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ С ++ разделяющий пробел и новая строка http://www.cyberforum.ru/cpp-beginners/thread1157818.html
С ++ разделяющий пробел и новая строка Как отличить при считывании из файла чисел Допустим 3 -5 6 8 2 0 8 -1 10 3 11 5 Нужно считать в vector< vector<int> > Изначально не зная размера!
C++ String и его приколы. Что и как сравнивается Цитата из книги: " Если две строки имеют разные длины и каждый символ которткий строки равен соответствующему символу длинной строки то короткая строка меньше длинной." Что за прикол? А не проше считат символы на строке и опеределит какая из них длинее. Вот простая программа. #include <iostream> #include <conio.h> #include <string> int main() { setlocale (LC_ALL , "Russian");... http://www.cyberforum.ru/cpp-beginners/thread1157813.html
Как сделать поиск в String по маске? C++
String str="<One>Hello<Strong>World<Two>"; как сделать поиск по маске в String, "<*>" чтобы программа искала только "<" и ">" а то что внутри считалось бы за * Добавлено через 2 часа 52 минуты Все спс решил сам
C++ Int to String
Подскажите стандартную функцию для конвертирования Int to String или других чисел в string
C++ Умножение матрицы a[i][j] на b[x][y]! http://www.cyberforum.ru/cpp-beginners/thread1157785.html
Есть две матрицы A и B размер которых задаёт и вводит пользователь с клавиатуры, матрицы хоронятся в динамических массивах соответственно a b. Проблема заключается в том, как организовать алгоритм (цикл) их умножение, если ответ будет записываться в динамический массив o. Прошу помощи в организации этого алгоритма! P.S. Про проверки на возможность умножения матриц не писать (пользователь всегда...
C++ Запись и вывод с бинарного файла Возникла проблема с записью в бинарный файл. я в программирование на С++ вообще слаб и не понимаю как сделать запись в бинарный файл для своей проги. вот модуль проги. помогите плиз. #include "list_animals.h" #include "animals.h" void inputConteiner2(vector<animals> &staff){ cout << "count staff n =>"; int n; cin >> n; string vid; подробнее

Показать сообщение отдельно
__sirroko
4 / 4 / 3
Регистрация: 03.03.2013
Сообщений: 55
26.04.2014, 11:19     Работа с STL vector
Добрый день!

Прошу объяснить следующие моменты связанные с <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


Заранее спасибо!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 15:30. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru