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

Как в vector поместить double, bool? - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.85
dqrest
2 / 2 / 0
Регистрация: 06.01.2012
Сообщений: 114
14.12.2012, 17:13     Как в vector поместить double, bool? #1
C++
1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
#include <vector>
using namespace std;
void main()
{
   vector<int> vec;
   double t = -12.34;
   bool b = false;
   vec.push_back(t);//как сюда поместить t?
   vec.push_back(b);//как сюда поместить b?
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.12.2012, 17:13     Как в vector поместить double, bool?
Посмотрите здесь:

C++ vector<bool> утверждение
C++ vector<vector <bool> >
C++ vector<vector<double>> + std::sort()
C++ std::copy из vector<double> в *double, непонятный warning
C++ bool vector
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4925 / 2668 / 243
Регистрация: 29.11.2010
Сообщений: 7,421
15.12.2012, 14:06     Как в vector поместить double, bool? #21
~OhMyGodSoLong~, читер. Тип данных то уже будет класс, а не double или bool.
Я понял, что ТС хочет так:
C++
1
2
3
4
int x = 2, bool y = false;
std::vector<who_knows_what_is_should_be> v;
v.push_back(x);
v.push_back(y);
С++ в отличии от скриптового языка PHP имеет строгую типизацию данных, массивы (ну или контейнеры) обязаны иметь один тип данных.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
15.12.2012, 14:08     Как в vector поместить double, bool? #22
~OhMyGodSoLong~, Я прекрасно понимаю, что это именно то, что хочет автор и что он отвергал все попытки выяснить, что у него за задача, но не легче ли завести 2 массива типов double и bool? Ведь кроме того, что они в одном массиве, во всех предложенных в этой теме примерах, эти переменные абсолютно ничего не объединяет!!!!
Зачем нужны все извращения с наследованием или объединениями, енумами и.т.п., если код
C++
1
2
3
4
5
6
double d_array[num_double];
bool     b_array[num_bool];
for (i=0; i<num_double; i++)//process all doubles
  secret_task=exp(sin(atan(d_array[i])));//абсолютно ничего общего в интерфейсе
for (i=1; i<num_bool-1; i++)//process all bools
  secret_task2=(b_array[i]||b_array[i-1])!=b_array[i+1];
выполнит задачу автора. Ведь как мы уже выяснили, ничего общего кроме "непременно поместить в один вектор" у этих данных нет. Их, значит будут обрабатывать разные функции, по разным алгоритмам, заполняя разными данными и вообще ... я невижу, какая логика может объединять это в один тип данных.
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
15.12.2012, 14:28     Как в vector поместить double, bool? #23
Цитата Сообщение от MrGluck Посмотреть сообщение
~OhMyGodSoLong~, читер. Тип данных то уже будет класс, а не double или bool.
Вы так говорите, как будто тип данных "double или bool" будет являться типом double или типом bool. Надмножеством да, но не строго равным же.

Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Ведь кроме того, что они в одном массиве, во всех предложенных в этой теме примерах, эти переменные абсолютно ничего не объединяет!!!!
А этого недостаточно разве?
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
15.12.2012, 14:38     Как в vector поместить double, bool? #24
Цитата Сообщение от ~OhMyGodSoLong~ Посмотреть сообщение
А этого недостаточно разве?
ну вообще-то нет. Если мне нужно 2 массива, я просто объявляю 2 массива.
Если же моя задача требует, чтобы данные как-то перекрывались в одной памяти, например, обычно это нужно, чтоб обратиться к отдельным байтам или битам из скажем числа uint16.
Тогда я использую union. Но, как видишь, нет абсолютно никакого смысла пихать в вектор никак не связанные данные. Зачем? Чтобы потом , доставая эти объекты из массива, вызывать у них getType()? вот смысл такого извращения? В том же ООП наоборот стараются абстрагироваться от конкретного типа.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4925 / 2668 / 243
Регистрация: 29.11.2010
Сообщений: 7,421
15.12.2012, 14:41     Как в vector поместить double, bool? #25
~OhMyGodSoLong~, строго говоря, элемент такого вектора будет содержать bool и double, просто работа будет лишь с одним из этих типов данных. Т.е. это будет не просто bool или просто double. ТС хотел создать подобие массива в PHP. На С++ это невозможно в чистом виде. Можно взять такой вариант как костыль, но каждый раз вызывать конструктор для инициализации переменной + таскать за собой лишний хвост точно некошерно.
Avazart
 Аватар для Avazart
6904 / 5144 / 253
Регистрация: 10.12.2010
Сообщений: 22,621
Записей в блоге: 17
15.12.2012, 14:49     Как в vector поместить double, bool? #26
Собственно а какая тут вообще необходимость в union ?
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
15.12.2012, 14:56     Как в vector поместить double, bool? #27
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Но, как видишь, нет абсолютно никакого смысла пихать в вектор никак не связанные данные. Зачем? Чтобы потом , доставая эти объекты из массива, вызывать у них getType()? вот смысл такого извращения? В том же ООП наоборот стараются абстрагироваться от конкретного типа.
Я хочу засунуть кучу всего в вектор, а потом передать его функции print, которая мне его красивенько выведет на экран. Что? Какие виртуальные функции? Какие указатели на объекты? Какие "и смарт-поинтеры, чтобы память не утекла"? Что это за извращение?

Абстрагирование — это именно "мне по барабану, как оно там внутри сделано, дайте мне засунуть в вектор double и bool одновременно" и есть.

Цитата Сообщение от MrGluck Посмотреть сообщение
ТС хотел создать подобие массива в PHP. На С++ это невозможно в чистом виде. Можно взять такой вариант как костыль, но каждый раз вызывать конструктор для инициализации переменной + таскать за собой лишний хвост точно некошерно.
Как будто в PHP для достижения его гибкости нет всего этого. Есть. И тайп-токен, и счётчик ссылок, и ещё пара указателей сверху. У каждого объекта. Включая числа, символы и т. п. И всё это инициализируется, изменяется и поддерживается в соответствующем состоянии.
Уровень абстракции позволяет похапистам этим просто пользоваться, не просыпаясь ночью в поту от кошмара "МОЯ СТРУКТУРА ДАННЫХ ЗАНИМАЕТ НА ДВА БАЙТА БОЛЬШЕ И ПРИ СОЗДАНИИ ВЫЗЫВАЕТ ТРИ ЛИШНИЕ ФУНКЦИИ ААААА КАПЕЦ ПРОИЗВОДИТЕЛЬНОСТИ ПОЙДУ ЗАСТРЕЛЮСЬ".
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4925 / 2668 / 243
Регистрация: 29.11.2010
Сообщений: 7,421
15.12.2012, 15:17     Как в vector поместить double, bool? #28
Как будто в PHP для достижения его гибкости нет всего этого. Есть.
~OhMyGodSoLong~, т.е. при создании массива в PHP создается некий элемент, который выделяет память под все типы сразу?
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
15.12.2012, 15:51     Как в vector поместить double, bool? #29
Цитата Сообщение от MrGluck Посмотреть сообщение
~OhMyGodSoLong~, т.е. при создании массива в PHP создается некий элемент, который выделяет память под все типы сразу?
PHP - интерпретируется, а не компилируется вроде бы. А значит, грубо говоря, сам в процессе выполнения определяет, что ему выделять.
Могу ошибаться, с рнр не знаком.
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
15.12.2012, 15:51     Как в vector поместить double, bool? #30
Можно и так сказать. Каждая величина в PHP, связываемая с переменной — это на самом деле вот такой struct _zval_struct, внутри которого именно что union.
Avazart
 Аватар для Avazart
6904 / 5144 / 253
Регистрация: 10.12.2010
Сообщений: 22,621
Записей в блоге: 17
15.12.2012, 15:58     Как в vector поместить double, bool? #31
Ну та это разные вещи вроде...
Юнион выделяет по максимуму памяти, а при интерпретации может выделятся именно столько сколько нужно.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4925 / 2668 / 243
Регистрация: 29.11.2010
Сообщений: 7,421
15.12.2012, 16:04     Как в vector поместить double, bool? #32
~OhMyGodSoLong~, наверняка в PHP при интерпретировании решается что будет использовано, что нет.
Avazart
 Аватар для Avazart
6904 / 5144 / 253
Регистрация: 10.12.2010
Сообщений: 22,621
Записей в блоге: 17
15.12.2012, 16:07     Как в vector поместить double, bool? #33
Цитата Сообщение от MrGluck Посмотреть сообщение
~OhMyGodSoLong~, наверняка в PHP при интерпретировании решается что будет использовано, что нет.
Вы так говорите как будто типы данных это не абстракция, а конкретные вещи, главным образом тип данных говорит только о количестве байт.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4925 / 2668 / 243
Регистрация: 29.11.2010
Сообщений: 7,421
15.12.2012, 16:26     Как в vector поместить double, bool? #34
Т.е. в пэ-ха-пэ выделяется под каждую переменную байт ровно столько, чтоб хватило на тип данных с самым большим размером (используется одна и та же область памяти, подобие union). Я правильно понимаю?
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
15.12.2012, 16:27     Как в vector поместить double, bool? #35
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//Если автору нужно это, то               
//сюда пусть вставит скрытое содержимое!!!
 
int main () {
 
 SetConsoleCP(1251);
 SetConsoleOutputCP(1251);
 
 
 vector v;
 v.push_back (45);
 v.push_back (false);
 v.push_back (false);
 v.push_back (45);
 
 v.f_chto_za_tip (0);
 v.f_chto_za_tip (1);
 v.f_chto_za_tip (2);
 v.f_chto_za_tip (3);
 
 getchar ();
 return 0;
}

Кликните здесь для просмотра всего текста
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#include <windows.h>
#include <vector>
#include <stdio.h>
 
class vector  {
 
 //Две структурки для хранения элементов
 struct dla___int {
  int nomer;
  int znach;
  dla___int (int x, int y):nomer(x),znach (y)  {};
 };
 
 struct dla_false {
  int  nomer;
  bool znach;
  dla_false (int x, bool y):nomer(x),znach (y)  {};
 };
 
 
 
 public:
  vector () {shotchik= 0;};
  ~vector () {};
 
  void push_back (int  x) {
   in.push_back(dla___int(shotchik++, x));
  }  
  
  void push_back (bool x) {
   bo.push_back(dla_false(shotchik++, x));
  }  
 
  void f_chto_za_tip (int x) {
   for (int i= 0; i< in.size (); i++) {
    if (x== in [i].nomer) {
     printf ("Это тип int\n");
     return;
    }
   }
 
   //printf ("== %d\n", in.size ());
   for (int i= 0; i< bo.size (); i++) {
    if (x== bo [i].nomer) {
     printf ("Это тип false\n");
    }
   }
  }  
 
 
 private:
  std::vector <dla___int> in;
  std::vector <dla_false> bo;
  int shotchik;
};
Avazart
 Аватар для Avazart
6904 / 5144 / 253
Регистрация: 10.12.2010
Сообщений: 22,621
Записей в блоге: 17
15.12.2012, 16:29     Как в vector поместить double, bool? #36
Цитата Сообщение от MrGluck Посмотреть сообщение
Т.е. в пэ-ха-пэ выделяется под каждую переменную байт ровно столько, чтоб хватило на тип данных с самым большим размером
Ну в этом то и вопрос...
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
15.12.2012, 16:34     Как в vector поместить double, bool? #37
Надо ещё подумать, как сделать так:
C++
1
vector <figna> v;
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
15.12.2012, 16:48     Как в vector поместить double, bool? #38
Ну, например, так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <vector>
#include <boost/any.hpp>
#include <typeinfo>
 
using boost::any_cast;
 
int main()
{
   std::vector<boost::any> vec;
   
   double f = 1.5;
   int i = 5;
   bool fl = false;
   
   vec.push_back(f);
   vec.push_back(i);
   vec.push_back(fl);
   
   if (vec[0].type() == typeid(double))
      std::cout << any_cast<double>(vec[0]) << std::endl;
   
}
http://liveworkspace.org/code/2rp3TM
Avazart
 Аватар для Avazart
6904 / 5144 / 253
Регистрация: 10.12.2010
Сообщений: 22,621
Записей в блоге: 17
15.12.2012, 16:51     Как в vector поместить double, bool? #39
Кстати как вариант может быть что вроде этого
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//---------------------------------------------------------------------------
class A
{
    void *mem;
    // enum Type {}
 
    public:
 
     A(int a){  mem= new int(a); }
     A(bool a){ mem= new bool(a); }
 
     void operator=(bool a){/* удаление mem если int и выделение под bool(a) */ };
     void operator=(int a){/*// удаление mem если bool и выделение под  int(a) */ };
 
     ~A(){ /*delete mem*/ }  //  учитывая Type
};
//---------------------------------------------------------------------------
Добавлено через 1 минуту
Динами́ческая типиза́ция — приём, широко используемый в языках программирования и языках спецификации, при котором переменная связывается с типом в момент присваивания значения, а не в момент объявления переменной. Таким образом, в различных участках программы одна и та же переменная может принимать значения разных типов. Примеры языков, где есть динамическая типизация — Smalltalk, Python, Objective-C, Ruby, PHP, Perl, JavaScript, Lisp, xBase,QtScript.
http://ru.wikipedia.org/wiki/%D0%94%...86%D0%B8%D1%8F
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.12.2012, 17:10     Как в vector поместить double, bool?
Еще ссылки по теме:

C++ Упаковка std :: vector <bool> в байты
C++ Как инициализировать vector<comlex<double>> заданными значениями?
Vector<bool> и visual c++ C++

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

Или воспользуйтесь поиском по форуму:
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
15.12.2012, 17:10     Как в vector поместить double, bool? #40
Цитата Сообщение от go Посмотреть сообщение
http://liveworkspace.org/code/2rp3TM
Странное что-то по ссылке скопировалось, не должно было. Вот рабочая ссылка http://liveworkspace.org/code/G59VD
Yandex
Объявления
15.12.2012, 17:10     Как в vector поместить double, bool?
Ответ Создать тему
Опции темы

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