在 C++ 中如何做冪運算

Jinku Hu 2023年10月12日
  1. 使用 std::pow 函式在 C++ 中把求一個數字的冪
  2. 使用自定義函式在 C++ 中求一個數字的平方
  3. 在 C++ 中使用自定義函式來做冪運算
在 C++ 中如何做冪運算

本文將演示關於如何在 C++ 中如何做冪運算的多種方法。

使用 std::pow 函式在 C++ 中把求一個數字的冪

std::pow 函式可以用來計算一個給定基數的冪,其中 n 可以是一個整數或浮點數。請注意,這個函式有多種異常和特殊情況,需要由程式設計師來處理,或者使用 C++ <cmath> 庫頭提供的單獨函式來實現。例如,pow 不能用來計算負數的根,而應該用 std::sqrtstd::cbrt。在下面的例子中,我們將求 int 向量的每個元素的立方值。

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

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

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;
}

輸出:

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

使用自定義函式在 C++ 中求一個數字的平方

除了前面的方法,還可以使用 pow 函式實現各種自定義函式,以擴充套件標準功能。這個例子演示了一個 Pow2Vector 函式,它接受一個 vector 容器,並求其元素的平方。注意,PrintVector 函式模板將向量元素輸出到控制檯,它可以接受任何內建資料型別的向量。

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

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

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;
}

輸出:

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

在 C++ 中使用自定義函式來做冪運算

作為前一種方法的延續,我們可以對基礎函式進行調整,以接受一個額外的指數值引數。這樣一來,我們基本上已經實現了將向量中的給定元素取到我們提供的冪的程式。注意,要想讓模板型別推導發揮作用,需要將 float/double 變數初始化為指數值,然後傳遞給 PowVector 函式。

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

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

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;
}

輸出:

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;
作者: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

DelftStack.com 創辦人。Jinku 在機器人和汽車行業工作了8多年。他在自動測試、遠端測試及從耐久性測試中創建報告時磨練了自己的程式設計技能。他擁有電氣/ 電子工程背景,但他也擴展了自己的興趣到嵌入式電子、嵌入式程式設計以及前端和後端程式設計。

LinkedIn Facebook

相關文章 - C++ Math