Proyecto Final C++
Proyecto Final C++
Proyecto Final C++
Pudiésemos declarar un array de esa estructura en cualquier parte del programa, por
ejemplo: Persona clientes.Ahora tenemos un array que contiene tres elementos, y cada
elemento, contiene dentro de sí todos los datos con los cuales ha sido declarada la
estructura: Nombre, apellido y edad.
#include "iostream"
int main()
{
char titulos [5];
char autores [5];
cout << "Por favor ingrese la siguiente información de los Libros: \n";
for (int i = 0; i < 5; i++)
{
cout << "\n******* Libro " << i + 1 <<"********:\n";
cout << "Titulo: ";
cin >> titulos[i];
cout << "Autor: ";
cin >> autores[i];
}
}
Implementa contenedores dinámicos (Vector, queue stack)
#include <cstdlib>
#include <iostream>
#include <vector>
v.push_back(999.25);
v.push_back(888.50);
v.push_back(777.25);
suma = 0;
for (int i = 0; i < v.size(); i++)
{
suma += v[i];
sprintf(buffer, "%10.2f", v[i]);
cout << buffer << endl;
}
cin.get();
return EXIT_SUCCESS;
}
cualquier tipo de objeto (hay algunas restricciones). Existen 3 tipos de clases contenedoras: contenedores de primera
clase, adaptadores y casi-contenedores.
También podemos catalogar a los contenedores por el tipo. Existen 3 tipos de contenedores: Contenedores de
secuencia, Contenedores asociativos y Adaptadores de contenedores. Vamos a ver una tabla con los tipos de
contenedores que hay.
#pragma warning(disable:4786)
#include "stdafx.h"
#include <queue>
#using <mscorlib.dll>
#if _MSC_VER > 1020
using namespace std;
#endif
using namespace System;
class Student {
public:
char* chName;
int nAge;
Student(): chName(""),nAge(0){}
Student( char* chNewName, int nNewAge ):chName(chNewName), nAge(nNewAge){}
};
bool operator< (const Student& structstudent1, const Student &structstudent2)
{
return structstudent1.nAge > structstudent2.nAge;
}
bool operator> (const Student& structstudent1, const Student &structstudent2)
{
return structstudent1.nAge < structstudent2.nAge;
}
int _tmain()
{
priority_queue<Student, vector<Student>,less<vector<Student>::value_type> > pqStudent1;
priority_queue<Student, vector<Student>,greater<vector<Student>::value_type> > pqStudent2;
pqStudent1.push( Student( "Mark", 38 ) );
pqStudent1.push( Student( "Marc", 25 ) );
pqStudent1.push( Student( "Bill", 47 ) );
pqStudent1.push( Student( "Andy", 13 ) );
pqStudent1.push( Student( "Newt", 44 ) );
while ( !pqStudent1.empty() ) {
cout << pqStudent1.top().chName << endl;
pqStudent1.pop();
}
cout << endl;
pqStudent2.push( Student( "Mark", 38 ) );
pqStudent2.push( Student( "Marc", 25 ) );
pqStudent2.push( Student( "Bill", 47 ) );
pqStudent2.push( Student( "Andy", 13 ) );
pqStudent2.push( Student( "Newt", 44 ) );
while ( !pqStudent2.empty() ) {
cout << pqStudent2.top().chName << endl;
pqStudent2.pop();
}
cout << endl;
return 0;
}
Se trata de pequeñas funciones que le permiten leer o cambiar parte del estado de un objeto, es
decir, una o varias variables internas. La razón por la que inline es tan importante para las
funciones de acceso se puede ver en el siguiente ejemplo:
class Access {
int i;
public:
int read() const { return i; }
void set(int ii) { i = ii; }
};
int main() {
Access A;
A.set(100);
int x = A.read();
} ///:~
insert(i, x)
Inserta un ítem en una posición dada. El primer argumento es el índice del ítem delante del cual se
insertará, por lo tanto a.insert(0, x) inserta al principio de la lista, y a.insert(len(a), x) equivale a
a.append(x)
// set::count
#include <iostream>
#include <set>
int main ()
{
std::set<int> myset;
return 0;
*Un set , el valor de retorno puede ser solo 0 o 1. Usando los mismos
valores que arriba, tendremos:
std::set<int> sut;
sut.insert(10);
sut.insert(15);
sut.insert(22);
sut.insert(3); // contains 3, 10, 15, 22
std::multiset<int> msut;
sut.insert(10);
sut.insert(15);
sut.insert(22);
sut.insert(15);
sut.insert(3); // contains 3, 10, 15, 15, 22
#include <iostream>
#include <string>
#include <utility>
#include <map>
#include <iomanip>
/*----------------------------------------*/
typedef pair<string, double> venta_dia;
int main()
{
cout << "\nUna simple prueba de map\n";
cout << "........................\n";
map<string, double> semana;
system("pause");
return 0;
}
#include <vector>
#include <algorithm>
#include <iostream>
struct Sum {
Sum() { sum = 0; }
void operator()(int n) { sum += n; }
int sum;
};
int main()
{
std::vector<int> nums{3, 4, 2, 9, 15, 267};
Mismatch ejemplo:
#include <iostream> // std::cout
#include <algorithm> // std::mismatch
#include <vector> // std::vector
#include <utility> // std::pair
int main () {
std::vector<int> myvector;
for (int i=1; i<6; i++) myvector.push_back (i*10); // myvector: 10 20 30 40 50
std::pair<std::vector<int>::iterator,int*> mypair;
++mypair.first; ++mypair.second;
return 0;
}
Equal ejemplo:
#include <iostream> // std::cout
#include <algorithm> // std::equal
#include <vector> // std::vector
int main () {
int myints[] = {20,40,60,80,100}; // myints: 20 40 60 80 100
std::vector<int>myvector (myints,myints+5); // myvector: 20 40 60 80 100
return 0;
}
Devuelve un iterador que apunta al elemento con el valor más pequeño en el rango [first,last).
Las comparaciones se realizan ya sea operator<para la primera versión o comp para la segunda;
Un elemento es el más pequeño si ningún otro elemento se compara menos que él. Si más de un
elemento cumple esta condición, el iterador devuelve puntos al primero de dichos elementos.
struct myclass {
bool operator () (int i, int j) {return i<j;}
} myobj;
int main () {
int myints[] = {3,7,2,5,6,4,9};
return 0;
}
Para reconocer las ejecuciones en el rango de entrada. Una ejecución es una subsecuencia contigua que es
ascendente o estrictamente descendente.
#include <algorithm>
#include <chrono>
#include <iostream>
#include <random>
#include "natural_merge_sort.h"
/*******************************************************************************
* Prints an array. *
*******************************************************************************/
template<class T>
static void print_int_array(const T* begin, const T* last)
{
while (begin < last)
{
std::cout << *begin++ << " ";
}
++begin;
}
return true;
}
Maximo:
#include
#include
#include
int main()
{
std::vector v{3, 1, 4, 1, 5, 9};
Mínimo:
#include
#include
#include
int main()
{
std::vector v{3, 1, 4, 1, 5, 9};
La función puts se usa para escribir una secuencia de caracteres al flujo de salida estándar:
#include <stdio.h>
int *puts(const char *s);
s se refiere al array que contiene la cadena de caracteres. Si la función se realiza correctamente, devuelve
0. Si no, devuelve algo distinto de cero.
#include <stdio.h>
#define TAM_MAXIMO 80
0
int main(void)
{
char cadena[TAM_MAXIMO];
Int main () {
Int i;
Float x;
Printf(“teclee el numero entero i /n”);
Sacnf(“%d”,&i);
Printf(“teclee el número real x /n”);
Scanf(“%f”,&x);
Return 0;
Para dar formato a los datos que se muestran por pantalla, C++ asocia con el stream de
salida un conjunto de manipuladores que permiten modificar la forma en la que son
visualizados los resultados.
Un manipulador equivale a una llamada a una función.
Algunos de los manipuladores más comunes son los siguientes:
dec conversión a decimal
hex conversión a hexadecimal
oct conversión a octal
skipws extrae un espacio en blanco inicial
endl se imprime un ‘\n’ y se vacía el buffer de salida
flush se vacía el buffer de salida
setw(int w) establece la anchura mínima de campo
setprecision(int p) establece el número de cifras significativas, por defecto 6.
setfill(char ch) establece el carácter de relleno
left la salida se alinea a la izquierda
rigth la salida se alinea a la derecha
internal se alinea el signo y los caracteres indicativos de la base por la izquierda
y las cifras por la derecha
showbase se muestra la base de los valores numéricos
showpoint se muestra el punto decimal
uppercase los caracteres de formato aparecen en mayúsculas
showpos se muestra el signo (+) en los valores positivos
scientific notación científica para coma flotante
fixed notación normal de C++ para coma flotante
setiosflag(long i) establece una lista de flags de formato
resetriosflag(long i) suprime una lista de flags de formato