我的 class 有没有办法像 C++ 中的数组一样获取输入值?
Is there any way my class take input value like array in C++?
我想写一个 class 并获取像数组这样的输入值
int arr[] = {1,2,3,4}
myFunc f = {a,b,c,d};
我的 class 有没有办法像 C++ 中的数组一样获取输入值?
这就是 std::initializer_list
的用途:
#include <vector>
#include <iostream>
class foo {
private:
std::vector<int> nums_;
public:
foo(std::initializer_list<int> init) :
nums_(init.begin(), init.end())
{}
void display() {
for (auto n : nums_) {
std::cout << " " << n;
}
std::cout << "\n";
}
};
int main()
{
foo f = { 1,2,3,4 };
f.display();
return 0;
}
您可以尝试传递一个指向数组的指针,例如:
class B
{
public:
B(int* arr, const size_t len)
{
// Bad way:
// this->arr = arr;
// this->len = len;
// Better:
this->arr = new int[len];
this->len = len;
for (int i = 0; i < len; i++)
{
this->arr[i] = arr[i];
}
}
~B()
{
// Don't forget to free unused dynamic memory:
delete[] this->arr;
}
void printArray() const
{
for (int i = 0; i < this->len; i++)
{
std::cout << this->arr[i] << " ";
}
std::cout << std::endl;
}
int* arr;
size_t len;
};
int main()
{
int* arr = new int[10];
for (int i = 0; i < 10; i++)
{
arr[i] = i + 1;
}
B b(arr, 10);
b.printArray();
delete[] arr;
return 0;
}
但问题是它不是内存安全的,也不是很有用,因为 CPP 的标准库提供了更好的解决方案。
例如,您可以使用 std::vector
我想写一个 class 并获取像数组这样的输入值
int arr[] = {1,2,3,4}
myFunc f = {a,b,c,d};
我的 class 有没有办法像 C++ 中的数组一样获取输入值?
这就是 std::initializer_list
的用途:
#include <vector>
#include <iostream>
class foo {
private:
std::vector<int> nums_;
public:
foo(std::initializer_list<int> init) :
nums_(init.begin(), init.end())
{}
void display() {
for (auto n : nums_) {
std::cout << " " << n;
}
std::cout << "\n";
}
};
int main()
{
foo f = { 1,2,3,4 };
f.display();
return 0;
}
您可以尝试传递一个指向数组的指针,例如:
class B
{
public:
B(int* arr, const size_t len)
{
// Bad way:
// this->arr = arr;
// this->len = len;
// Better:
this->arr = new int[len];
this->len = len;
for (int i = 0; i < len; i++)
{
this->arr[i] = arr[i];
}
}
~B()
{
// Don't forget to free unused dynamic memory:
delete[] this->arr;
}
void printArray() const
{
for (int i = 0; i < this->len; i++)
{
std::cout << this->arr[i] << " ";
}
std::cout << std::endl;
}
int* arr;
size_t len;
};
int main()
{
int* arr = new int[10];
for (int i = 0; i < 10; i++)
{
arr[i] = i + 1;
}
B b(arr, 10);
b.printArray();
delete[] arr;
return 0;
}
但问题是它不是内存安全的,也不是很有用,因为 CPP 的标准库提供了更好的解决方案。
例如,您可以使用 std::vector