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

generate () - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.69
Ardarik
11 / 8 / 2
Регистрация: 16.01.2011
Сообщений: 222
05.06.2011, 16:14     generate () #1
нужно создать программу используя generate (). Нужно сгенерировать 4 числа от 0 до 3. Нашел
C++
1
2
3
4
5
template <class ForwardIterator, class Generator>
  void generate ( ForwardIterator first, ForwardIterator last, Generator gen )
{
  while (first != last)  *first++ = gen();
}
а как этим пользоваться не пойму
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.06.2011, 16:14     generate ()
Посмотрите здесь:

C++ generate() и equal()
Random; generate.Next(min, max) C#
GPSS В чем измеряется время в блоке generate?
GPSS Переменные для GENERATE
Invalid attempt to enter a GENERATE Block GPSS
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2294 / 1664 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
05.06.2011, 16:23     generate () #2
Ardarik,
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
#include <algorithm>
#include <cstddef>
#include <cstdlib>
#include <ctime>
#include <iostream>
#include <iterator>
 
int Random()
{
  const int min = 0;
  const int max = 3;
  
  return min + std::rand() % (max - min + 1);
}
 
int main() {
  const std::size_t size = 4;
  int               array[size];
  
  std::srand(std::time(0));
  std::generate(array, array + size, Random);
  
  std::copy(array, array + size, std::ostream_iterator<int>(std::cout, " "));
}
Результат: http://liveworkspace.org/code/339f52...bda0586591aa6c
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
05.06.2011, 16:31     generate () #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
#include <algorithm>
#include <iostream>
#include <vector>
#include <iterator>
 
class Gen
{
public:
  Gen() : m_a(0)
  {
  }
  int operator()()
  {
     return m_a++;
  }
private:
  int m_a;
};
 
int main()
{
  std::vector<int> v(4);
  std::generate( v.begin(), v.end(), Gen() );
  std::copy( v.begin(), v.end(), std::ostream_iterator<int>( std::cout, " " ) );
}
Nameless One
Эксперт С++
 Аватар для Nameless One
5754 / 3403 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
05.06.2011, 16:34     generate () #4
Немного непонятно, нужны ли тебе последовательные либо случайные значения. Написал и так, и так:
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#include <algorithm>
#include <vector>
#include <iostream>
#include <iterator>
#include <cstdlib>
#include <ctime>
 
struct random_gen
{
    const int l_t, r_t;
    random_gen(int l, int r);
    int operator () ();
};
 
struct successive_gen
{
    int current;
    successive_gen(int c = 0);
    int operator() ();
};
    
int main()
{
    srand(static_cast<size_t>(time(NULL)));
 
    const int l_t = 0;
    const int r_t = 3;
    const size_t cnt = 4;
    
    std::vector<int> random(cnt);
    std::vector<int> successive(cnt);
 
    std::generate(random.begin(), random.end(), random_gen(l_t, r_t));
    std::generate(successive.begin(), successive.end(), successive_gen(l_t));
 
    // Вывод вектора случайных значений
    std::cout << cnt << " random values in range [" << l_t << ";" << r_t << "]: ";
    std::copy(random.begin(), random.end(), std::ostream_iterator<int>(std::cout, " "));
    std::cout << std::endl;
 
    // Вывод последовательных значений
    std::cout << cnt << " successive values starting from " << l_t << ": ";
    std::copy(successive.begin(),
          successive.end(),
          std::ostream_iterator<int>(std::cout, " "));
    std::cout << std::endl;
    
    return 0;
}
 
random_gen::random_gen(int l, int r)
    : l_t(l), r_t(r)
{
}
 
int random_gen::operator() ()
{
    return rand() % (r_t - l_t + 1) + l_t;
}
 
successive_gen::successive_gen(int c)
    : current(c)
{
}
 
int successive_gen::operator() ()
{
    return current++;
}
Еще можно через лямбды сделать

Хе, опоздал...
Ardarik
11 / 8 / 2
Регистрация: 16.01.2011
Сообщений: 222
05.06.2011, 19:25  [ТС]     generate () #5
alex_x_x всегда генерирует 0 1 2 3 у меня.
А как эти числа поместить в вектор?
C++
1
std::copy( v.begin(), v.end(), std::ostream_iterator<int>( std::cout, " " ) );
в код CyBOSSeR???
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2294 / 1664 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
05.06.2011, 19:54     generate () #6
Цитата Сообщение от Ardarik Посмотреть сообщение
А как эти числа поместить в вектор?
В 3-ем и 4-ом постах используются именно векторы.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.06.2011, 21:23     generate ()
Еще ссылки по теме:

JavaScript Generate url from bootstrap group button
Generate Device Name Objective-C
GPSS Что означают цифры рядом с GENERATE

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

Или воспользуйтесь поиском по форуму:
Ardarik
11 / 8 / 2
Регистрация: 16.01.2011
Сообщений: 222
05.06.2011, 21:23  [ТС]     generate () #7
Я подумал Ваш код легче будет переделывать. Nameless One обьемный код написал, буду разбираться
Yandex
Объявления
05.06.2011, 21:23     generate ()
Ответ Создать тему
Опции темы

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