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

Создайте класс StringVector, производный от vector<void*> - C++

Восстановить пароль Регистрация
 
helloy
0 / 0 / 0
Регистрация: 15.11.2013
Сообщений: 46
25.12.2013, 13:14     Создайте класс StringVector, производный от vector<void*> #1
Создайте класс StringVector, производный от vector<void*>. Переопределите функции push_back() и operator[] так, чтобы они принимали и возвращали string*.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <string>
#include <vector>
using namespace std;
 
class StringVector: public vector<void*> {
public:
  StringVector(){}
  string* push_back(string*str){
      vector<void*>::push_back(str);
  }
 
  string*operator[](string*str){
  
  }
};
 
 
int main() {
    StringVector base;
 
}
как дальше?

Добавлено через 12 часов 29 минут
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ShadowFirst
54 / 47 / 1
Регистрация: 31.10.2013
Сообщений: 161
25.12.2013, 13:22     Создайте класс StringVector, производный от vector<void*> #2
Насколько я знаю push_back не должно возвращать значения
И опишите конкретно что не получается.
helloy
0 / 0 / 0
Регистрация: 15.11.2013
Сообщений: 46
25.12.2013, 13:26  [ТС]     Создайте класс StringVector, производный от vector<void*> #3
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
#include <iostream>
#include <string>
#include <vector>
#include <fstream>
using namespace std;
 
class StringVector: public vector<void*> {
public:
  string* push(string*str){
      vector<void*>::push_back(str);
  }
 
  string*operator[](int index){
      return (string*)vector<void*>::operator[](index);
  }
  ~StringVector(){
      vector<void*>::clear();
  }
 
};
 
 
int main() {
    ifstream in("25.cpp");
    StringVector base;
    string line;
    while(getline(in,line)) base.push_back(new string(line));
    for(int i=0;i<base.size();i++){cout<<*base[i]<<endl;}
 
}
Добавлено через 11 секунд
пока дождёшься...

Добавлено через 1 минуту
or
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
#include <iostream>
#include <string>
#include <vector>
#include <fstream>
 
class StringVector: public std::vector<void*> {
public:
  std::string* push(std::string*str){
      vector<void*>::push_back(str);
  }
 
  std::string*operator[](int index){
      return (std::string*)std::vector<void*>::operator[](index);
  }
  ~StringVector(){
      vector<void*>::clear();
  }
 
};
 
 
int main() {
    std::ifstream in("25.cpp");
    StringVector base;
    std::string line;
    while(std::getline(in,line))
        base.push_back(new std::string(line));
    for(int i=0;i<base.size();++i)
        std::cout<<*base[i]<<std::endl;
 
}
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5549 / 2563 / 233
Регистрация: 01.11.2011
Сообщений: 6,337
Завершенные тесты: 1
25.12.2013, 13:28     Создайте класс StringVector, производный от vector<void*> #4
Цитата Сообщение от ShadowFirst Посмотреть сообщение
Насколько я знаю push_back не должно возвращать значения
Все верно:
C++
1
void push_back(const _Tp& __x)...
helloy
0 / 0 / 0
Регистрация: 15.11.2013
Сообщений: 46
25.12.2013, 13:41  [ТС]     Создайте класс StringVector, производный от vector<void*> #5
Цитата Сообщение от SatanaXIII Посмотреть сообщение
push_back не должно возвращать значения
Думаю автор имел вот что:
C++
1
2
3
4
5
6
//...
std::string* push(std::string*str){
     vector<void*>::push_back(str);
      return (std::string*)vector<void*>::back();
  }
//...

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
#include <iostream>
#include <string>
#include <vector>
#include <fstream>
 
class StringVector: public std::vector<void*> {
public:
  std::string* push(std::string*str){
     vector<void*>::push_back(str);
      return (std::string*)vector<void*>::back();
  }
 
  std::string*operator[](int index){
      return (std::string*)std::vector<void*>::operator[](index);
  }
  ~StringVector(){
      vector<void*>::clear();
  }
 
};
 
 
int main() {
    std::ifstream in("25.cpp");
    StringVector base;
    std::string line;
    while(std::getline(in,line))
        std::cout<<*base.push(new std::string(line))<<std::endl;
    
 
}
Добавлено через 9 минут
Конечный результат:
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
#include <iostream>
#include <string>
#include <vector>
#include <fstream>
 
class StringVector: public std::vector<void*> {
public:
  std::string* push(std::string*str){
     vector<void*>::push_back(str);
      return (std::string*)vector<void*>::back();
  }
 
  std::string*operator[](std::string*str){
      for(int i=0;i<int(std::vector<void*>::size());++i)
          if (*(std::string*)std::vector<void*>::operator[](i)==*str){
            return (std::string*)std::vector<void*>::operator[](i);
          }
        return 0;
  }
  ~StringVector(){
      vector<void*>::clear();
  }
 
};
 
 
int main() {
//hello
    std::ifstream in("MY.cpp");
    StringVector base;
    std::string line;
    while(std::getline(in,line))
        std::cout<<*base.push(new std::string(line))<<std::endl;
    std::cout<<base[new std::string("//hello")];
    
 
}
ShadowFirst
54 / 47 / 1
Регистрация: 31.10.2013
Сообщений: 161
25.12.2013, 19:58     Создайте класс StringVector, производный от vector<void*> #6
Так как ваш класс унаследован от vector<void*> то можно использовать запись в push_back:
C++
1
this->push_back и значение.
И все равно возвращать значение после того как его туда пометили бессмысленно
Yandex
Объявления
25.12.2013, 19:58     Создайте класс StringVector, производный от vector<void*>
Ответ Создать тему
Опции темы

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