С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

14.12.2012, 17:13. Просмотров 1721. Ответов 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++. Объявляю вначале...

47
Avazart
Эксперт С++
7262 / 5434 / 304
Регистрация: 10.12.2010
Сообщений: 24,165
Записей в блоге: 17
15.12.2012, 15:58 #31
Ну та это разные вещи вроде...
Юнион выделяет по максимуму памяти, а при интерпретации может выделятся именно столько сколько нужно.
0
MrGluck
Модератор
Эксперт CЭксперт С++
7498 / 4614 / 694
Регистрация: 29.11.2010
Сообщений: 12,634
15.12.2012, 16:04 #32
~OhMyGodSoLong~, наверняка в PHP при интерпретировании решается что будет использовано, что нет.
0
Avazart
Эксперт С++
7262 / 5434 / 304
Регистрация: 10.12.2010
Сообщений: 24,165
Записей в блоге: 17
15.12.2012, 16:07 #33
Цитата Сообщение от MrGluck Посмотреть сообщение
~OhMyGodSoLong~, наверняка в PHP при интерпретировании решается что будет использовано, что нет.
Вы так говорите как будто типы данных это не абстракция, а конкретные вещи, главным образом тип данных говорит только о количестве байт.
0
MrGluck
Модератор
Эксперт CЭксперт С++
7498 / 4614 / 694
Регистрация: 29.11.2010
Сообщений: 12,634
15.12.2012, 16:26 #34
Т.е. в пэ-ха-пэ выделяется под каждую переменную байт ровно столько, чтоб хватило на тип данных с самым большим размером (используется одна и та же область памяти, подобие union). Я правильно понимаю?
0
kravam
быдлокодер
1704 / 891 / 45
Регистрация: 04.06.2008
Сообщений: 5,489
15.12.2012, 16:27 #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;
};
0
Avazart
Эксперт С++
7262 / 5434 / 304
Регистрация: 10.12.2010
Сообщений: 24,165
Записей в блоге: 17
15.12.2012, 16:29 #36
Цитата Сообщение от MrGluck Посмотреть сообщение
Т.е. в пэ-ха-пэ выделяется под каждую переменную байт ровно столько, чтоб хватило на тип данных с самым большим размером
Ну в этом то и вопрос...
0
kravam
быдлокодер
1704 / 891 / 45
Регистрация: 04.06.2008
Сообщений: 5,489
15.12.2012, 16:34 #37
Надо ещё подумать, как сделать так:
C++
1
vector <figna> v;
0
go
Эксперт С++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
15.12.2012, 16:48 #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
2
Avazart
Эксперт С++
7262 / 5434 / 304
Регистрация: 10.12.2010
Сообщений: 24,165
Записей в блоге: 17
15.12.2012, 16:51 #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
0
go
Эксперт С++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
15.12.2012, 17:10 #40
Цитата Сообщение от go Посмотреть сообщение
http://liveworkspace.org/code/2rp3TM
Странное что-то по ссылке скопировалось, не должно было. Вот рабочая ссылка http://liveworkspace.org/code/G59VD
0
Avazart
Эксперт С++
7262 / 5434 / 304
Регистрация: 10.12.2010
Сообщений: 24,165
Записей в блоге: 17
15.12.2012, 17:17 #41
Но подобный пример с enum и с boost/any не проканает с типами вроде std::string
0
MrGluck
Модератор
Эксперт CЭксперт С++
7498 / 4614 / 694
Регистрация: 29.11.2010
Сообщений: 12,634
15.12.2012, 17:20 #42
Avazart, если честно, кому вообще в С++ кроме ТС может потребоваться написать подобную вещь? (Я про создание вектора или массива с различным типом данных)
1
Avazart
Эксперт С++
7262 / 5434 / 304
Регистрация: 10.12.2010
Сообщений: 24,165
Записей в блоге: 17
15.12.2012, 17:21 #43
Не знаю...

Ну а если например необходимо написать что-то вроде интерпретатора того же php ?
Да и в boost ведь есть any ( и если не ошибаюсь есть еще что-то на эту тему ) значит была необходимость.
0
go
Эксперт С++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
15.12.2012, 17:27 #44
Цитата Сообщение от Avazart Посмотреть сообщение
о подобный пример с enum и с boost/any не проканает с типами вроде std::string
Это почему?
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
#include <iostream>
#include <vector>
#include <boost/any.hpp>
#include <typeinfo>
#include <string>
 
using boost::any_cast;
 
int main()
{
   std::vector<boost::any> vec;
   
   double f = 1.5;
   std::string i = "dasd";
   bool fl = false;
   
   vec.push_back(f);
   vec.push_back(i);
   vec.push_back(fl);
   
   if (vec[1].type() == typeid(std::string))
      std::cout << any_cast<std::string>(vec[1]) << std::endl;
   
   if (vec[0].type() == typeid(std::string))
      std::cout << any_cast<std::string>(vec[0]) << std::endl;
   else
      std::cout << "Error type" << std::endl;
   
}
http://liveworkspace.org/code/3k2s43

Добавлено через 29 секунд
Цитата Сообщение от dqrest Посмотреть сообщение
КАк в vector поместить double, bool?
Да и ТС хочет.
1
MrGluck
Модератор
Эксперт CЭксперт С++
7498 / 4614 / 694
Регистрация: 29.11.2010
Сообщений: 12,634
15.12.2012, 17:29 #45
Цитата Сообщение от Avazart Посмотреть сообщение
Но подобный пример с enum и с boost/any не проканает с типами вроде std::string
Кстати почему?
Converting types that can hold one of a number of possible value types, e.g. int and string,
http://www.boost.org/doc/libs/1_52_0/doc/html/any.html
0
15.12.2012, 17:29
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.12.2012, 17:29
Привет! Вот еще темы с ответами:

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++
Помогите, пожалуйста. При компиляции появляется ошибка (фото ниже). Это реализация алгоритма Хаффмана. Не могу понять, что не так, по...


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

Или воспользуйтесь поиском по форуму:
45
Ответ Создать тему
Опции темы

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