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

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

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

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

14.12.2012, 17:13. Просмотров 1659. Ответов 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?
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.12.2012, 17:13
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как в vector поместить double, bool? (C++):

std::copy из vector<double> в *double, непонятный warning - C++
double myD={10,20,30,40,50,60,70}; std::vector&lt;double&gt; myvector (7); std::copy ( myD, myD+7, myvector.begin() ); std::copy (...

vector<vector<double>> + std::sort() - C++
Позвольте узнать... Возможно ли через vector&lt;vector&lt;double&gt;&gt; и функцию std::sort() отсортировать строки массива в лексикографическом...

Как выделить числа 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++. Объявляю вначале...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
dqrest
2 / 2 / 0
Регистрация: 06.01.2012
Сообщений: 114
14.12.2012, 19:14  [ТС] #16
Цитата Сообщение от Avazart Посмотреть сообщение
Ага, а если не double ?
через
C++
1
2
3
4
virtual char* getType()
{
return typeid(int).name();
}
Добавлено через 2 минуты
Цитата Сообщение от Avazart Посмотреть сообщение
Офигенный класс

Добавлено через 42 секунды

Говорят же идиотская задача, в рамках типизированного языка
Вопрос такой, а как же тогда в php ассоциативные массивы распознаются?Ведь там в массив все-что хочешь можешь впихнуть, строки, int и т.д.
0
Avazart
Эксперт С++
7188 / 5362 / 280
Регистрация: 10.12.2010
Сообщений: 23,665
Записей в блоге: 17
14.12.2012, 19:15 #17
Ну собственно в этом и задача.. проверять тип перед к доступу к данным

Добавлено через 1 минуту
Цитата Сообщение от dqrest Посмотреть сообщение
Вопрос такой, а как же тогда в php ассоциативные массивы распознаются?Ведь там в массив все-что хочешь можешь впихнуть, строки, int и т.д.
php не язык программирования и вообще вон с раздела с++

Впихнуть невпихуемое плохая задача, ибо навиГ оно надо, если эффективность страдает
0
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,925
Записей в блоге: 1
14.12.2012, 19:16 #18
Ещё раз уточни задачу. Если понадобилось хранить указатели на объекты разных типов в массиве, обычно означает, что у этих объектов есть некий общий интерфейс из виртуальных функций, по которому их будут обрабатывать, доставая из массива и вызывая эти методы .
Но зачем это делать просто так, да ещё и с функцией вроде getType? которая сама по себе противоречит ООП?
0
dqrest
2 / 2 / 0
Регистрация: 06.01.2012
Сообщений: 114
15.12.2012, 10:52  [ТС] #19
Спасибо за совет и критику)Но все таки такая задача выполнима)
0
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
15.12.2012, 13:50 #20
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Variant {
public:
    enum Type { BOOL, DOUBLE };
 
private:
    Type type;
    union {
        bool data_bool;
        double data_double;
    };
 
public:
    Variant(bool value) : type(BOOL), data_bool(value) {}
    Variant(double value) : type(DOUBLE), data_double(value) {}
};
Идея ясна?
1
MrGluck
Модератор
Эксперт CЭксперт С++
7239 / 4407 / 642
Регистрация: 29.11.2010
Сообщений: 11,927
15.12.2012, 14:06 #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 имеет строгую типизацию данных, массивы (ну или контейнеры) обязаны иметь один тип данных.
0
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,925
Записей в блоге: 1
15.12.2012, 14:08 #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];
выполнит задачу автора. Ведь как мы уже выяснили, ничего общего кроме "непременно поместить в один вектор" у этих данных нет. Их, значит будут обрабатывать разные функции, по разным алгоритмам, заполняя разными данными и вообще ... я невижу, какая логика может объединять это в один тип данных.
0
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
15.12.2012, 14:28 #23
Цитата Сообщение от MrGluck Посмотреть сообщение
~OhMyGodSoLong~, читер. Тип данных то уже будет класс, а не double или bool.
Вы так говорите, как будто тип данных "double или bool" будет являться типом double или типом bool. Надмножеством да, но не строго равным же.

Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Ведь кроме того, что они в одном массиве, во всех предложенных в этой теме примерах, эти переменные абсолютно ничего не объединяет!!!!
А этого недостаточно разве?
0
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,925
Записей в блоге: 1
15.12.2012, 14:38 #24
Цитата Сообщение от ~OhMyGodSoLong~ Посмотреть сообщение
А этого недостаточно разве?
ну вообще-то нет. Если мне нужно 2 массива, я просто объявляю 2 массива.
Если же моя задача требует, чтобы данные как-то перекрывались в одной памяти, например, обычно это нужно, чтоб обратиться к отдельным байтам или битам из скажем числа uint16.
Тогда я использую union. Но, как видишь, нет абсолютно никакого смысла пихать в вектор никак не связанные данные. Зачем? Чтобы потом , доставая эти объекты из массива, вызывать у них getType()? вот смысл такого извращения? В том же ООП наоборот стараются абстрагироваться от конкретного типа.
0
MrGluck
Модератор
Эксперт CЭксперт С++
7239 / 4407 / 642
Регистрация: 29.11.2010
Сообщений: 11,927
15.12.2012, 14:41 #25
~OhMyGodSoLong~, строго говоря, элемент такого вектора будет содержать bool и double, просто работа будет лишь с одним из этих типов данных. Т.е. это будет не просто bool или просто double. ТС хотел создать подобие массива в PHP. На С++ это невозможно в чистом виде. Можно взять такой вариант как костыль, но каждый раз вызывать конструктор для инициализации переменной + таскать за собой лишний хвост точно некошерно.
0
Avazart
Эксперт С++
7188 / 5362 / 280
Регистрация: 10.12.2010
Сообщений: 23,665
Записей в блоге: 17
15.12.2012, 14:49 #26
Собственно а какая тут вообще необходимость в union ?
0
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
15.12.2012, 14:56 #27
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Но, как видишь, нет абсолютно никакого смысла пихать в вектор никак не связанные данные. Зачем? Чтобы потом , доставая эти объекты из массива, вызывать у них getType()? вот смысл такого извращения? В том же ООП наоборот стараются абстрагироваться от конкретного типа.
Я хочу засунуть кучу всего в вектор, а потом передать его функции print, которая мне его красивенько выведет на экран. Что? Какие виртуальные функции? Какие указатели на объекты? Какие "и смарт-поинтеры, чтобы память не утекла"? Что это за извращение?

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

Цитата Сообщение от MrGluck Посмотреть сообщение
ТС хотел создать подобие массива в PHP. На С++ это невозможно в чистом виде. Можно взять такой вариант как костыль, но каждый раз вызывать конструктор для инициализации переменной + таскать за собой лишний хвост точно некошерно.
Как будто в PHP для достижения его гибкости нет всего этого. Есть. И тайп-токен, и счётчик ссылок, и ещё пара указателей сверху. У каждого объекта. Включая числа, символы и т. п. И всё это инициализируется, изменяется и поддерживается в соответствующем состоянии.
Уровень абстракции позволяет похапистам этим просто пользоваться, не просыпаясь ночью в поту от кошмара "МОЯ СТРУКТУРА ДАННЫХ ЗАНИМАЕТ НА ДВА БАЙТА БОЛЬШЕ И ПРИ СОЗДАНИИ ВЫЗЫВАЕТ ТРИ ЛИШНИЕ ФУНКЦИИ ААААА КАПЕЦ ПРОИЗВОДИТЕЛЬНОСТИ ПОЙДУ ЗАСТРЕЛЮСЬ".
2
MrGluck
Модератор
Эксперт CЭксперт С++
7239 / 4407 / 642
Регистрация: 29.11.2010
Сообщений: 11,927
15.12.2012, 15:17 #28
Как будто в PHP для достижения его гибкости нет всего этого. Есть.
~OhMyGodSoLong~, т.е. при создании массива в PHP создается некий элемент, который выделяет память под все типы сразу?
0
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,925
Записей в блоге: 1
15.12.2012, 15:51 #29
Цитата Сообщение от MrGluck Посмотреть сообщение
~OhMyGodSoLong~, т.е. при создании массива в PHP создается некий элемент, который выделяет память под все типы сразу?
PHP - интерпретируется, а не компилируется вроде бы. А значит, грубо говоря, сам в процессе выполнения определяет, что ему выделять.
Могу ошибаться, с рнр не знаком.
0
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
15.12.2012, 15:51 #30
Можно и так сказать. Каждая величина в PHP, связываемая с переменной — это на самом деле вот такой struct _zval_struct, внутри которого именно что union.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.12.2012, 15:51
Привет! Вот еще темы с ответами:

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

vector<vector <bool> > - C++
vector&lt;vector &lt;bool&gt; &gt; v1; bool v2 = { {1,1}, {1,1}, }; как v1 присвоить v2? Добавлено через 1 минуту в c++11...

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

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


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
15.12.2012, 15:51
Ответ Создать тему
Опции темы

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