vector and valarray


Tip
When an array is declared, the size of the array has to be specified. While this is very efficient, this is also very restrictive, because in some cases, the number of elements that will be stored in the array is not known in advanced. In these cases, C++ arrays cannot be used and dynamic memory has to be used. On the other hand, the valarray template implements a dynamic array (an array that can grow or shrink). Additionally, valarray supports several mathematical operations and functions.
Cuando un arreglo se declara, el tamaño del arreglo tiene que ser especificado. Mientras que esto es muy eficiente, esto también es muy restrictivo porque, en algunos casos, el número de elemento que se almacenarán en el arreglo no se conoce con anticipación. En estos casos, los arreglos de C++ no pueden ser usados y la memoria dinámica tiene que usarse. Por otro lado, la plantilla valarray implementa un arreglo dinámico (un arreglo que puede crecer o hacerse más pequeño). Adicionalmente, valarray soporta varias funciones y operaciones matemáticas.

vector and valarray

vector is one of the most popular STL templates. It describes a generic array. valarray is similar to vector, but valarray is optimized for numeric values. Always use valarray for integers and floating point values; use vector for all the other cases. The vector template is defined in a header file called vector that is included in all Wintempla projects.
vector es una de las plantillas más populares de la STL. Esta describe un arreglo de datos genérico. valarray es muy similar a la plantilla vector, pero valarray está optimizado para trabajar con valores numéricos. Siempre use valarray para almacenar enteros o valores con punto decimal; use vector para todos los otros casos. La platilla del vector está definida en un archivo de encabezado llamado vector que es incluido en los proyectos de Wintempla.

Problem 1
Create project called Clasificador as shown below; use the template vector to implement your program. When the user presses the Maximum button, the maximum value is displayed in the output list. The other buttons operate similarly.
Cree un proyecto llamado Clasificador como se muestra debajo; use la plantilla de vector para implementar su programa. Cuando el usuario presiona el botón de Maximum, el valor máximo se muestra en la lista de salida. Los otros botones operan en forma similar.

Clasificador.h
#pragma once //______________________________________ Clasificador.h
#include "resource.h"

class Clasificador: public Win::Dialog
{
public:
     Clasificador()
     {
     }
     ~Clasificador()
     {
     }
     vector<double> inputData;
protected:
     ...
};

Clasificador.cpp
void Clasificador::Window_Open(Win::Event& e)
{
}

void Clasificador::btInsert_Click(Win::Event& e)
{
     const double number = tbxNumber.DoubleValue;
     inputData.push_back(number);
     tbxNumber.Text = L"";
     tbxNumber.SetFocus();
     wstring texto;
     Sys::Format(texto, L"%g\r\n", number);
     tbxInput.Text += texto;
}

void Clasificador::btMinimum_Click(Win::Event& e)
{
     if (inputData.empty() == true)
     {
          tbxOutput.Text = L"";
          return;
     }
     double minimum = inputData[0];
     const unsigned int count = inputData.size();
     for (unsigned int i = 1; i<count; i++)
     {
          if (inputData[i] < minimum) minimum = inputData[i];
     }
     tbxOutput.DoubleValue = minimum;
}

void Clasificador::btMaximum_Click(Win::Event& e)
{
}

void Clasificador::btPositive_Click(Win::Event& e)
{
}

void Clasificador::btNegative_Click(Win::Event& e)
{
}

void Clasificador::btMean_Click(Win::Event& e)
{
}

void Clasificador::btSum_Click(Win::Event& e)
{
}

void Clasificador::btClear_Click(Win::Event& e)
{
     inputData.clear();
     tbxInput.Text = L"";
     tbxOutput.Text = L"";
}

ClasificadorMin

ClasificadorMax

ClasificadorPos

ClasificadorSum

ClasificadorMean

Tip
There are some small differences between vector and valarray. For instance, a new element can be inserted to a vector using the function push_back. However, valarray does not support the function push_back; instead the programmer must use the function resize to change the size of the container.
Hay unas diferencias pequeñas entre el vector y valarray. Por ejemplo, un nuevo elemento puede ser insertado a un vector usando la función push_back. Sin embargo, valarray no soporta la función push_back; en su lugar el programador debe usar la función resize para cambiar el tamaño del contenedor.

Problem 2
Create project called Acomodador as shown below; use the template vector and the algorithm sort from the STL to implement your program. When the user presses the insert button, the number is inserted in the list on the left. When the user presses the sort button the numbers are sorted (from the smallest to the biggest) and displayed in the list of the right.
Cree un proyecto llamado Acomodador como se muestra debajo; use la plantilla de vector y el algoritmo sort de la STL para implementar su programa. Cuando el usuario presiona el botón de insertar, el número es insertado en la lista de la izquierda. Cuando el usuario presiona el botón de sort los números son ordenados de menor a mayor y mostrados en la lista de la derecha.

Acomodador.h
#pragma once //______________________________________ Acomodador.h
#include "resource.h"

class Acomodador: public Win::Dialog
{
public:
     Acomodador()
     {
     }
     ~Acomodador()
     {
     }
     vector<double> inputData;
     ...
};

Acomodador.cpp
void Acomodador::Window_Open(Win::Event& e)
{
}

void Acomodador::btInsert_Click(Win::Event& e)
{
     ...
     inputData.push_back(number);
}

void Acomodador::btSort_Click(Win::Event& e)
{
     std::sort(inputData.begin(), inputData.end());
     //___________________________ Show sorted data
     ...
}

Acomodador

Problem 3
Create project called Classifier as shown below; use the template vector to implement your program. When the user presses the Maximum button, the maximum value is displayed in the output list. The other buttons operate similarly.
Cree un proyecto llamado Classifier como se muestra debajo; use la plantilla de vector para implementar su programa. Cuando el usuario presiona el botón de Maximum, el valor máximo se muestra en la lista de salida. Los otros botones operan en forma similar.

Classifier.h
#pragma once //______________________________________ Classifier.h
#include "resource.h"

class Classifier: public Win::Dialog
{
public:
     Classifier()
     {
     }
     ~Classifier()
     {
     }
protected:
     ...
};

Clasificador.cpp
void Classifier::Window_Open(Win::Event& e)
{
}

void Classifier::btMinimum_Click(Win::Event& e)
{
     valarray<double> inputData;
     Sys::Convert::ToVector(tbxInput.Text, inputData); // Converts the text to a valarray
     tbxOutput.DoubleValue = inputData.min();
}

void Classifier::btMaximum_Click(Win::Event& e)
{
}

void Classifier::btPositive_Click(Win::Event& e)
{
     valarray<double> inputData;
     Sys::Convert::ToVector(tbxInput.Text, inputData); // Converts the text to a valarray

     const int size = inputData.size();
     //__________________________________ Copy positive values
     vector<double> output;
     for(int i = 0; i < size; i++)
     {
          if (inputData[i] > 0) output.push_back(inputData[i]);
     }
     //__________________________________ Convert the vector to text and display results
     wstring text;
     Sys::Convert::ToString(output, text);
     tbxOutput.Text = text;
}

void Classifier::btNegative_Click(Win::Event& e)
{
}

void Classifier::btClear_Click(Win::Event& e)
{
}

void Classifier::btSum_Click(Win::Event& e)
{
}

void Classifier::btMean_Click(Win::Event& e)
{
}

void Classifier::btVariance_Click(Win::Event& e)
{
}

ClassifierMin

ClassifierMax

ClassifierPos

ClassifierSum

ClassifierMean

ClassifierVar

Tip
When resizing a vector, the previous values are retained. However, when resizing a valarray, the previous values are lost (set to zero.)
Cuando se cambia de tamaño un vector, los valores previos se mantienen. Sin embargo, cuando se cambia de tamaño un valarray, los valores previos son perdidos (fijados a cero).

© Copyright 2000-2019 Wintempla selo. All Rights Reserved. Sep 05 2019. Home