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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.85
dqrest
2 / 2 / 0
Регистрация: 06.01.2012
Сообщений: 114
#1

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

14.12.2012, 17:13. Просмотров 1639. Ответов 47
Метки нет (Все метки)

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?
Посмотрите здесь:

Как выделить числа double из vector<char> - C++
Здравствуйте, форумчане. Это вопрос о следующей проблеме http://www.cyberforum.ru/cpp-beginners/thread1523545.html#post8032759 Есть...

bool vector - C++
#include &lt;iostream&gt; using namespace std; #include &lt;vector&gt; int main() { vector&lt;bool&gt; myBool(10);

Как инициализировать vector<comlex<double>> заданными значениями? - C++
Добрый день. У меня есть табличка с косинусами и синусами первообразных корней из единички: {-1.00000000000000000000000000000000, ...

Vector<bool> и visual c++ - C++
Приветствую, пытаюсь адаптировать консольный исходник алгоритма Хаффмана в форменное приложение visual Studio 2005 c++. Объявляю вначале...

vector<bool> утверждение - C++
друзья! Страутструп утверждает что проще пареной репы. подскажите как? что то в голову не идет. Как сделать так чтобы элемент вектор бул...

Упаковка std :: vector <bool> в байты - C++
Добрый Вечер! возникла проблема: нужно элементы std::vector&lt;bool&gt; упаковать в байты для последующей записи в файл собственно,...

Ошибка при использовании vector<bool> - C++
Текст ошибки (Visual studio 2013): Ошибка 2 error C2440: return: невозможно преобразовать...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MrGluck
Модератор
Эксперт CЭксперт С++
7158 / 4324 / 630
Регистрация: 29.11.2010
Сообщений: 11,745
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
1890 / 1745 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 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
~ Эврика! ~
1243 / 992 / 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
1890 / 1745 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 1
15.12.2012, 14:38     Как в vector поместить double, bool? #24
Цитата Сообщение от ~OhMyGodSoLong~ Посмотреть сообщение
А этого недостаточно разве?
ну вообще-то нет. Если мне нужно 2 массива, я просто объявляю 2 массива.
Если же моя задача требует, чтобы данные как-то перекрывались в одной памяти, например, обычно это нужно, чтоб обратиться к отдельным байтам или битам из скажем числа uint16.
Тогда я использую union. Но, как видишь, нет абсолютно никакого смысла пихать в вектор никак не связанные данные. Зачем? Чтобы потом , доставая эти объекты из массива, вызывать у них getType()? вот смысл такого извращения? В том же ООП наоборот стараются абстрагироваться от конкретного типа.
MrGluck
Модератор
Эксперт CЭксперт С++
7158 / 4324 / 630
Регистрация: 29.11.2010
Сообщений: 11,745
15.12.2012, 14:41     Как в vector поместить double, bool? #25
~OhMyGodSoLong~, строго говоря, элемент такого вектора будет содержать bool и double, просто работа будет лишь с одним из этих типов данных. Т.е. это будет не просто bool или просто double. ТС хотел создать подобие массива в PHP. На С++ это невозможно в чистом виде. Можно взять такой вариант как костыль, но каждый раз вызывать конструктор для инициализации переменной + таскать за собой лишний хвост точно некошерно.
Avazart
Эксперт С++
7115 / 5292 / 273
Регистрация: 10.12.2010
Сообщений: 23,387
Записей в блоге: 17
15.12.2012, 14:49     Как в vector поместить double, bool? #26
Собственно а какая тут вообще необходимость в union ?
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 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
Модератор
Эксперт CЭксперт С++
7158 / 4324 / 630
Регистрация: 29.11.2010
Сообщений: 11,745
15.12.2012, 15:17     Как в vector поместить double, bool? #28
Как будто в PHP для достижения его гибкости нет всего этого. Есть.
~OhMyGodSoLong~, т.е. при создании массива в PHP создается некий элемент, который выделяет память под все типы сразу?
Kuzia domovenok
1890 / 1745 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 1
15.12.2012, 15:51     Как в vector поместить double, bool? #29
Цитата Сообщение от MrGluck Посмотреть сообщение
~OhMyGodSoLong~, т.е. при создании массива в PHP создается некий элемент, который выделяет память под все типы сразу?
PHP - интерпретируется, а не компилируется вроде бы. А значит, грубо говоря, сам в процессе выполнения определяет, что ему выделять.
Могу ошибаться, с рнр не знаком.
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
15.12.2012, 15:51     Как в vector поместить double, bool? #30
Можно и так сказать. Каждая величина в PHP, связываемая с переменной — это на самом деле вот такой struct _zval_struct, внутри которого именно что union.
Avazart
Эксперт С++
7115 / 5292 / 273
Регистрация: 10.12.2010
Сообщений: 23,387
Записей в блоге: 17
15.12.2012, 15:58     Как в vector поместить double, bool? #31
Ну та это разные вещи вроде...
Юнион выделяет по максимуму памяти, а при интерпретации может выделятся именно столько сколько нужно.
MrGluck
Модератор
Эксперт CЭксперт С++
7158 / 4324 / 630
Регистрация: 29.11.2010
Сообщений: 11,745
15.12.2012, 16:04     Как в vector поместить double, bool? #32
~OhMyGodSoLong~, наверняка в PHP при интерпретировании решается что будет использовано, что нет.
Avazart
Эксперт С++
7115 / 5292 / 273
Регистрация: 10.12.2010
Сообщений: 23,387
Записей в блоге: 17
15.12.2012, 16:07     Как в vector поместить double, bool? #33
Цитата Сообщение от MrGluck Посмотреть сообщение
~OhMyGodSoLong~, наверняка в PHP при интерпретировании решается что будет использовано, что нет.
Вы так говорите как будто типы данных это не абстракция, а конкретные вещи, главным образом тип данных говорит только о количестве байт.
MrGluck
Модератор
Эксперт CЭксперт С++
7158 / 4324 / 630
Регистрация: 29.11.2010
Сообщений: 11,745
15.12.2012, 16:26     Как в vector поместить double, bool? #34
Т.е. в пэ-ха-пэ выделяется под каждую переменную байт ровно столько, чтоб хватило на тип данных с самым большим размером (используется одна и та же область памяти, подобие union). Я правильно понимаю?
kravam
быдлокодер
1693 / 880 / 44
Регистрация: 04.06.2008
Сообщений: 5,438
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
Эксперт С++
7115 / 5292 / 273
Регистрация: 10.12.2010
Сообщений: 23,387
Записей в блоге: 17
15.12.2012, 16:29     Как в vector поместить double, bool? #36
Цитата Сообщение от MrGluck Посмотреть сообщение
Т.е. в пэ-ха-пэ выделяется под каждую переменную байт ровно столько, чтоб хватило на тип данных с самым большим размером
Ну в этом то и вопрос...
kravam
быдлокодер
1693 / 880 / 44
Регистрация: 04.06.2008
Сообщений: 5,438
15.12.2012, 16:34     Как в vector поместить double, bool? #37
Надо ещё подумать, как сделать так:
C++
1
vector <figna> v;
go
Эксперт C++
3586 / 1366 / 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
Эксперт С++
7115 / 5292 / 273
Регистрация: 10.12.2010
Сообщений: 23,387
Записей в блоге: 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?
Еще ссылки по теме:

Vector <bool> erase iterator outside range - C++
Помогите, пожалуйста. При компиляции появляется ошибка (фото ниже). Это реализация алгоритма Хаффмана. Не могу понять, что не так, по...

Примерная реализация std vector bool - C++
добрый вечер, не могу найти в сети реализацию st::vector&lt;bool&gt; - есть у кого под рукой?) Почитать)

Преобразование double в bool - C++
Не удаётся сделать следующее, есть входные данные к примеру 0.5 или 1 float , нужно вернуть bool template &lt;class T&gt; inline T...

Конфликт типов (int, double, bool) - C++
Есть простейший класс class A { public: A( long ) {} A( double ){} A( bool ) {} } и при создании обьекта new...

Ребята есть ли метод vector <bool> записать в бинарный файл? - C++
Всем доброго времени. Возник вопрос есть ли такой хитрый способ чтоб можно было записать в бинарник значения булл имеем vector &lt;bool&gt;...


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

Или воспользуйтесь поиском по форуму:
go
Эксперт C++
3586 / 1366 / 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?
Ответ Создать тему
Опции темы

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