Come eseguire l'elevazione a potenza in C++

Lasha Khintibidze 30 gennaio 2023 30 marzo 2021
  1. Usa la funzione std::pow per alimentare un numero in C++
  2. Usa una funzione personalizzata per quadrare un numero in C++
  3. Usa le funzioni personalizzate per eseguire l’esponenziazione in C++
Come eseguire l'elevazione a potenza in C++

Questo articolo illustrerà vari metodi su come eseguire l’elevazione a potenza in C++.

Usa la funzione std::pow per alimentare un numero in C++

La funzione std::pow può essere usata per calcolare la potenza di una data base, dove n può essere un numero intero o in virgola mobile. Si noti che questa funzione ha una varietà di eccezioni e casi speciali, che devono essere gestiti dal programmatore o implementati utilizzando una funzione separata fornita dall’intestazione della libreria C++ <cmath>. Ad esempio, pow non può essere utilizzato per calcolare la radice di numeri negativi, ma std::sqrt o std::cbrt. Nell’esempio seguente, troveremo il valore del cubo di ogni elemento del vettore int.

#include <iostream>
#include <vector>
#include <iterator>
#include <cmath>

using std::cout; using std::endl;
using std::vector; using std::copy;
using std::pow; using std::ostream_iterator;

template <typename T>
void PrintVector(vector<T> &arr)
{
    copy(arr.begin(), arr.end(),
         ostream_iterator<T>(cout,"; "));
    cout << endl;
}

constexpr int POWER = 3;

int main() {
    vector<int> arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

    PrintVector(arr);
    for (auto &item : arr) {
        item = pow(item, POWER);
    }
    PrintVector(arr);

    return EXIT_SUCCESS;
}

Produzione:

1; 2; 3; 4; 5; 6; 7; 8; 9; 10;
1; 8; 27; 64; 125; 216; 343; 512; 729; 1000;

Usa una funzione personalizzata per quadrare un numero in C++

Oltre ai metodi precedenti, puoi anche usare la funzione pow per implementare varie funzioni personalizzate per estendere le funzioni standard. Questo esempio mostra una funzione Pow2Vector, che accetta un contenitore vector e ne piazza gli elementi. Notare che il modello di funzione PrintVector invia elementi vettoriali alla console e può accettare vettori di qualsiasi tipo di dati incorporato.

#include <iostream>
#include <vector>
#include <iterator>
#include <cmath>

using std::cout; using std::endl;
using std::vector; using std::copy;
using std::pow; using std::ostream_iterator;

template <typename T>
void PrintVector(vector<T> &arr)
{
    copy(arr.begin(), arr.end(),
         ostream_iterator<T>(cout,"; "));
    cout << endl;
}

template <typename T>
vector<T> &Pow2Vector(vector<T> &arr){
    for (auto &i : arr) {
        i = pow(i, 2);
    }
    return arr;
}

constexpr int POWER = 3;

int main() {
    vector<int> arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

    PrintVector(Pow2Vector(arr));

    return EXIT_SUCCESS;
}

Produzione:

1; 4; 9; 16; 25; 36; 49; 64; 81; 100;

Usa le funzioni personalizzate per eseguire l’esponenziazione in C++

Come continuazione del metodo precedente, possiamo regolare la funzione di base per accettare un parametro del valore di indice aggiuntivo. In questo modo, abbiamo sostanzialmente implementato un programma che porta un dato elemento in un vettore alla potenza che abbiamo fornito. Nota che per far funzionare la deduzione del tipo di template, devi inizializzare la variabile float / double su un valore esponente e poi passarla alla funzione PowVector.

#include <iostream>
#include <vector>
#include <iterator>
#include <cmath>

using std::cout; using std::endl;
using std::vector; using std::copy;
using std::pow; using std::ostream_iterator;

template <typename T>
void PrintVector(vector<T> &arr)
{
    copy(arr.begin(), arr.end(),
         ostream_iterator<T>(cout,"; "));
    cout << endl;
}

template <typename T>
vector<T> &PowVector(vector<T> &arr, T power) {
    for (auto &i : arr) {
        i = pow(i, power);
    }
    return arr;
}

constexpr int POWER = 3;

int main() {
    vector<int> arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    vector<float> arr2 = {1.2, 2.3, 3.2, 4.5, 5.5, 6.2, 7.1, 8.2, 9.0, 10.1};

    float power = 2.0;
    PrintVector(PowVector(arr, 5));
    PrintVector(PowVector(arr2, power));

    return EXIT_SUCCESS;
}

Produzione:

1; 32; 243; 1024; 3125; 7776; 16807; 32768; 59049; 100000;
1.44; 5.29; 10.24; 20.25; 30.25; 38.44; 50.41; 67.24; 81; 102.01;

Articolo correlato - C++ Math