我有個問題。我需要創建一個代碼,我可以在其中從另一個函式訪問 bool 陣列資訊,編輯陣列,然后將其發回。我需要使用一個變數作為陣列的大小。
全域變數不是一個選項。
我試圖通過參考并使用結構來傳遞它。
代碼例如:
void x(bool (&reserved[sizeOfArray)) {
if (reserved[1] == true) {
cout << "it's true";
}
main() {
int sizeOfArray = 6;
bool reserved[sizeOfArray];
x(reserved[sizeOfArray];
編輯:陣列的大小是在程式已經運行時確定的
uj5u.com熱心網友回復:
如果大小僅在運行時確定,您基本上有兩個選擇:
使用動態大小的容器,例如
std::vectorvoid x(std::vector<bool>& reserved)使用“C 方法”傳遞指向陣列第一個元素的指標以及陣列大小
void x(bool reserved[], size_t size)
在陣列中最后一個“哨兵”值(如 C 字串)的可能的第三個選項不適用于bool,因為您只有兩個值可供選擇。
uj5u.com熱心網友回復:
我認為輕量級方法是使用 std::span 代替。
#include <iostream>
#include <span>
void x(std::span<bool> reserved) {
reserved[1] = false;
}
int main() {
constexpr size_t sizeOfArray = 6;
bool reserved[sizeOfArray]{false, true};
x(reserved);
if (reserved[1] == false) {
std::cout << "Hello!" << std::endl;
}
}
uj5u.com熱心網友回復:
您可以將其設為函式模板,將陣列大小作為模板引數:
#include <iostream>
template<size_t N>
void x(bool (&reserved)[N]) {
// make sure that the array size is at least 2 to not get out of
// bounds access in reserved[1]:
if constexpr (N >= 2) {
if (reserved[1] == true) {
std::cout << "it's true\n";
}
}
}
int main() {
constexpr size_t sizeOfArray = 6; // must be a constant expression
bool reserved[sizeOfArray]{false,true}; // rest will be false
x(reserved);
}
輸出:
It's true
uj5u.com熱心網友回復:
您可以boost::dynamic_bitset用于 bool 的動態向量。[演示]
#include <boost/dynamic_bitset.hpp>
#include <iostream> // cout
void x(const boost::dynamic_bitset<>& reserved) {
if (reserved[1] == true) {
std::cout << "it's true\n\n";
}
for (int i{0}; i < reserved.size(); i)
{
std::cout << "Bit " << i << ": " << reserved[i] << "\n";
}
}
int main() {
int sizeOfArray = 6;
boost::dynamic_bitset<> reserved(sizeOfArray, 0b111010);
x(reserved);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/383758.html
