that_one_nigga_you_k

classe ainda mais completa

Sep 3rd, 2024
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.23 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. template <typename T>
  4. class Vetor {
  5. private:
  6.     T* arr;
  7.     int capacidade;
  8.     int atual;
  9.  
  10. public:
  11.     // Construtor padrão
  12.     Vetor() {
  13.         arr = new T[1];
  14.         capacidade = 1;
  15.         atual = 0;
  16.     }
  17.  
  18.     // Construtor com tamanho inicial
  19.     Vetor(int tamanho) {
  20.         arr = new T[tamanho];
  21.         capacidade = tamanho;
  22.         atual = tamanho;
  23.     }
  24.  
  25.     // Construtor com tamanho inicial e valores
  26.     Vetor(int tamanho, T valor) {
  27.         arr = new T[tamanho];
  28.         capacidade = tamanho;
  29.         atual = tamanho;
  30.         for (int i = 0; i < tamanho; i++) {
  31.             arr[i] = valor;
  32.         }
  33.     }
  34.  
  35.     // Construtor a partir de um array
  36.     Vetor(T* inicio, T* fim) {
  37.         int tamanho = fim - inicio;
  38.         arr = new T[tamanho];
  39.         capacidade = tamanho;
  40.         atual = tamanho;
  41.         for (int i = 0; i < tamanho; i++) {
  42.             arr[i] = inicio[i];
  43.         }
  44.     }
  45.  
  46.     // Construtor a partir de outro vetor (cópia direta)
  47.     Vetor(const Vetor& outro) {
  48.         capacidade = outro.capacidade;
  49.         atual = outro.atual;
  50.         arr = new T[capacidade];
  51.         for (int i = 0; i < atual; i++) {
  52.             arr[i] = outro.arr[i];
  53.         }
  54.     }
  55.  
  56.     ~Vetor() {
  57.         delete[] arr;
  58.     }
  59.  
  60.     void adicionar(T dado) {
  61.         if (atual == capacidade) {
  62.             T* temp = new T[2 * capacidade];
  63.             for (int i = 0; i < capacidade; i++) {
  64.                 temp[i] = arr[i];
  65.             }
  66.             delete[] arr;
  67.             capacidade *= 2;
  68.             arr = temp;
  69.         }
  70.         arr[atual] = dado;
  71.         atual++;
  72.     }
  73.  
  74.     void adicionar(T dado, int indice) {
  75.         if (indice == capacidade) {
  76.             adicionar(dado);
  77.         } else {
  78.             arr[indice] = dado;
  79.         }
  80.     }
  81.  
  82.     T obter(int indice) {
  83.         if (indice < atual) {
  84.             return arr[indice];
  85.         }
  86.         return -1; // ou lançar uma exceção
  87.     }
  88.  
  89.     void remover() {
  90.         if (atual > 0) {
  91.             atual--;
  92.         }
  93.     }
  94.  
  95.     int tamanho() {
  96.         return atual;
  97.     }
  98.  
  99.     int obterCapacidade() {
  100.         return capacidade;
  101.     }
  102.  
  103.     void imprimir() {
  104.         for (int i = 0; i < atual; i++) {
  105.             std::cout << arr[i] << " ";
  106.         }
  107.         std::cout << std::endl;
  108.     }
  109.  
  110.     // Operador de índice
  111.     T& operator {
  112.         if (indice >= atual) {
  113.             throw std::out_of_range("Índice fora do intervalo");
  114.         }
  115.         return arr[indice];
  116.     }
  117.  
  118.     // Método para redimensionar o vetor
  119.     void redimensionar(int novoTamanho, T valor = T()) {
  120.         T* temp = new T[novoTamanho];
  121.         int limite = (novoTamanho < atual) ? novoTamanho : atual;
  122.         for (int i = 0; i < limite; i++) {
  123.             temp[i] = arr[i];
  124.         }
  125.         for (int i = limite; i < novoTamanho; i++) {
  126.             temp[i] = valor;
  127.         }
  128.         delete[] arr;
  129.         arr = temp;
  130.         capacidade = novoTamanho;
  131.         atual = novoTamanho;
  132.     }
  133. };
  134.  
  135. int main() {
  136.     // Usando o construtor padrão
  137.     Vetor<int> v1;
  138.     v1.adicionar(10);
  139.     v1.adicionar(20);
  140.     v1.adicionar(30);
  141.  
  142.     std::cout << "Elementos do vetor v1: ";
  143.     v1.imprimir();
  144.  
  145.     // Usando o construtor com tamanho inicial
  146.     Vetor<int> v2(5);
  147.     v2.adicionar(40);
  148.     v2.adicionar(50);
  149.  
  150.     std::cout << "Elementos do vetor v2: ";
  151.     v2.imprimir();
  152.  
  153.     // Usando o construtor com tamanho inicial e valores
  154.     Vetor<int> v3(4, 100);
  155.  
  156.     std::cout << "Elementos do vetor v3: ";
  157.     v3.imprimir();
  158.  
  159.     // Usando o construtor a partir de um array
  160.     int meusInts[] = {16, 2, 77, 29};
  161.     Vetor<int> v4(meusInts, meusInts + sizeof(meusInts) / sizeof(int));
  162.  
  163.     std::cout << "Elementos do vetor v4: ";
  164.     v4.imprimir();
  165.  
  166.     // Usando o construtor a partir de outro vetor (cópia direta)
  167.     Vetor<int> v5(v4);
  168.     std::cout << "Elementos do vetor v5 (cópia de v4): ";
  169.     v5.imprimir();
  170.  
  171.     // Acessando elementos com o operador []
  172.     std::cout << "Elemento no índice 2 de v5: " << v5[2] << std::endl;
  173.  
  174.     // Redimensionando o vetor
  175.     v5.redimensionar(6, 200);
  176.     std::cout << "Elementos do vetor v5 após redimensionar: ";
  177.     v5.imprimir();
  178.  
  179.     return 0;
  180. }
  181.  
Add Comment
Please, Sign In to add comment