在 C++ 中初始化物件陣列
-
使用
new
運算子在 C++ 中使用引數化建構函式初始化物件陣列 -
使用
std::vector::push_back
函式初始化帶有引數化建構函式的物件陣列 -
使用
std::vector::emplace_back
函式初始化帶有引數化建構函式的物件陣列
本文將演示在 C++ 中用引數化建構函式初始化物件陣列的多種方法。
使用 new
運算子在 C++ 中使用引數化建構函式初始化物件陣列
new
運算子是 C++ 動態記憶體管理介面的一部分,它等效於 C 語言中的 malloc
函式。請注意,動態記憶體管理需要使用者分配指定固定大小的記憶體並將其在不再需要時返回給系統的流程。
new
用於從系統請求固定數量的位元組,如果呼叫成功,它將返回指向儲存區域的指標。在下面的示例中,我們定義了一個名為 Pair
的類,它具有兩個建構函式和一個 printPair
,以將資料成員輸出到控制檯。首先,我們需要使用 new
運算子分配一個由四對組成的 Pairs
陣列。接下來,我們可以使用 for 迴圈遍歷陣列,並且每次迭代都使用引數化的建構函式初始化該元素。請注意,應該在程式退出之前使用 delete
操作符釋放分配的陣列。還要注意,delete []
符號對於取消分配陣列的每個元素是必需的。
#include <iostream>
#include <vector>
using std::cout; using std::cin;
using std::endl; using std::string;
using std::vector;
class Pair {
int x, y;
public:
Pair() = default;
Pair(int a, int b) : x(a), y(b) {}
void printPair() const {
cout << "x: " << x << endl << "y: " << y << endl;
}
};
int main(){
Pair *arr = new Pair[4];
for (int i = 0; i < 4; ++i) {
arr[i] = Pair(i * 2, i * i);
}
for (int i = 0; i < 4; ++i) {
arr[i].printPair();
}
delete [] arr;
return EXIT_SUCCESS;
}
輸出:
x: 0
y: 0
x: 2
y: 1
x: 4
y: 4
x: 6
y: 9
使用 std::vector::push_back
函式初始化帶有引數化建構函式的物件陣列
另外,更多的無頭方法是將物件儲存在 std::vector
容器中,該容器將提供內建函式來動態初始化新元素。即,Pair
定義保持不變,但是每次迭代時,我們將呼叫 push_back
函式,並將其從第二個建構函式傳遞給 Pair
值。從好的方面來說,我們不必擔心記憶體資源的釋放。他們會自動清理。
#include <iostream>
#include <vector>
using std::cout; using std::cin;
using std::endl; using std::string;
using std::vector;
class Pair {
int x, y;
public:
Pair() = default;
Pair(int a, int b) : x(a), y(b) {}
void printPair() const {
cout << "x: " << x << endl << "y: " << y << endl;
}
};
int main(){
vector<Pair> array;
for (int i = 0; i < 4; ++i) {
array.push_back(Pair(i * 2, i * i));
}
for (const auto &item : array) {
item.printPair();
}
return EXIT_SUCCESS;
}
輸出:
x: 0
y: 0
x: 2
y: 1
x: 4
y: 4
x: 6
y: 9
使用 std::vector::emplace_back
函式初始化帶有引數化建構函式的物件陣列
用引數化建構函式初始化物件陣列的另一種方法是利用 std::vector
類的 emplace_back
函式。這樣,我們只需要傳遞 Pair
建構函式的值,而 emplace_back
會自動為我們構造一個新元素。像以前的方法一樣,該方法也不需要使用者擔心記憶體管理。
#include <iostream>
#include <vector>
using std::cout; using std::cin;
using std::endl; using std::string;
using std::vector;
class Pair {
int x, y;
public:
Pair() = default;
Pair(int a, int b) : x(a), y(b) {}
void printPair() const {
cout << "x: " << x << endl << "y: " << y << endl;
}
};
int main(){
vector<Pair> array;
for (int i = 0; i < 4; ++i) {
array.emplace_back(i * 2, i * i);
}
for (const auto &item : array) {
item.printPair();
}
return EXIT_SUCCESS;
}
輸出:
x: 0
y: 0
x: 2
y: 1
x: 4
y: 4
x: 6
y: 9
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn