Примеры работы с vector — различия между версиями

Материал из Вики ИТ мехмата ЮФУ
Перейти к: навигация, поиск
м (Ulysses переименовал страницу Пример работы с vector в Примеры работы с vector)
 
(не показаны 4 промежуточные версии этого же участника)
Строка 1: Строка 1:
<source lang="cpp">// main.cpp
+
<source lang="cpp">// vector: (шаблон класса динамического массива)
 +
#include <vector>
  
// vector:
+
// cout, endl
#include <vector>
+
#include <iostream>
  
//rand:
+
//rand, srand:
 
#include <cstdlib>
 
#include <cstdlib>
  
 +
//time:
 +
#include <ctime>
 +
 +
using std::rand;
 +
using std::srand;
 +
using std::time;
 
using std::vector;
 
using std::vector;
using std::rand;
 
  
 +
// случайное целое в диапазоне [0, n)
 +
int random(int n)
 +
{
 +
    return rand() / (double) RAND_MAX * n;
 +
}
 +
 +
// случайное целое в диапазоне (-n, n)
 +
int random_sgn(int n)
 +
{
 +
    int sign = random(2) ? -1 : 1;
 +
    return random(n) * sign;
 +
}
 +
 +
// вектор размера size из случайных целых по модулю не больше max
 +
// если при вызове функции второй аргумент не задан, то  max = 10
 
vector<int> random_vector(int size, int max = 10)
 
vector<int> random_vector(int size, int max = 10)
 
{
 
{
     //...
+
     vector<int> v;
 +
    v.reserve(size); // резервируем место под size элементов -- это
 +
                    // необязательно, но потенциально эффективней
 +
    for (int i = 0; i < size; ++i)
 +
    {
 +
        v.push_back(random_sgn(max)); // добавляем в вектор очередное число
 +
    }
 +
    return v;
 +
}
 +
 
 +
// печать вектора: обратите внимание на передачу по ссылке на константу
 +
template <typename Vec> // шаблон функции: печатает вектор любого типа
 +
void print_vector(Vec const & v)
 +
{
 +
    for (int i = 0; i < v.size(); ++i)
 +
    {
 +
        std::cout << v[i] << std::endl;
 +
    }
 
}
 
}
  
 
int main()
 
int main()
 
{
 
{
 +
    srand(time(0));
 
     vector<int> v = random_vector(5);
 
     vector<int> v = random_vector(5);
 
+
    print_vector(v);
 
}
 
}
 
</source>
 
</source>
  
 
[[Категория:C++]]
 
[[Категория:C++]]

Текущая версия на 06:24, 12 декабря 2013

// vector: (шаблон класса динамического массива)
#include <vector>

// cout, endl
#include <iostream>

//rand, srand:
#include <cstdlib>

//time:
#include <ctime>

using std::rand;
using std::srand;
using std::time;
using std::vector;

// случайное целое в диапазоне [0, n)
int random(int n)
{
    return rand() / (double) RAND_MAX * n;
}

// случайное целое в диапазоне (-n, n)
int random_sgn(int n)
{
    int sign = random(2) ? -1 : 1;
    return random(n) * sign;
}

// вектор размера size из случайных целых по модулю не больше max
// если при вызове функции второй аргумент не задан, то  max = 10
vector<int> random_vector(int size, int max = 10)
{
    vector<int> v;
    v.reserve(size); // резервируем место под size элементов -- это
                     // необязательно, но потенциально эффективней
    for (int i = 0; i < size; ++i)
    {
        v.push_back(random_sgn(max)); // добавляем в вектор очередное число
    }
    return v;
}

// печать вектора: обратите внимание на передачу по ссылке на константу
template <typename Vec> // шаблон функции: печатает вектор любого типа
void print_vector(Vec const & v)
{
    for (int i = 0; i < v.size(); ++i)
    {
        std::cout << v[i] << std::endl;
    }
}

int main()
{
    srand(time(0));
    vector<int> v = random_vector(5);
    print_vector(v);
}