你好我想创建简单的数组类来获取值并插入像(array[0] = 4)
这样的值,这是我的程序,但我有同时使用[] =
进行插入的问题
template <typename Param>
class arr
{
private:
int Last_point = 0;
Param Data[];
public:
void& operator[]=(int Element_id, Param v)
{
Data[Element_id] = v;
}
Param& operator[] (int Element_id)
{
return Data[Element_id];
}
};
void main()
{
arr <int> Array;
Array[1] = 555;
cout << "Is(" << to_string(Array[1]) << ")" << endl;
system("pause");
}
是否有像([] =)这样的运算符?或者为此,我必须使用哪种方法?如果只使用[]
答案 0 :(得分:2)
Foo& operator[]
足以进行阅读和写作。Param[]
替换为std::vector<Param>
。size_t
instead of int
for array index types. Array[1]
包裹在to_string
中以进行输出。void main
! The standard says main
must be int
. void&
is not valid C++ either. #include <iostream>
using namespace std;
template <typename Param, size_t Size> class arr {
private:
Param Data[Size];
public:
Param &operator[](size_t Element_id) {
return Data[Element_id];
}
};
int main() {
arr<int, 3> Array;
Array[1] = 555;
cout << "Is(" << Array[1] << ")" << endl;
}
但是,arr
在我的代码段中所做的一切都不太有用std::array
!
答案 1 :(得分:2)
您尝试 // Version for non-const objects
Param& operator[](std::size_t i)
{
return Data[i];
}
// Version for const objects
Param const& operator[](std::size_t i) const
{
return Data[i];
}
函数的语法是错误的。你需要这样的东西:
template <typename Param, std::size_t N>
class arr
{
private:
Param Data[N];
public:
Param& operator[](std::size_t i)
{
return Data[i];
}
Param const& operator[](std::size_t i) const
{
return Data[i];
}
};
如果要支持在编译时已知大小的数组,可以使用:
template <typename Param>
class arr
{
private:
Param* Data;
public:
arr(size_t size) : Data(new Param[size]) {}
~arr() { delete [] Data; }
Param& operator[](std::size_t i)
{
return Data[i];
}
Param const& operator[](std::size_t i) const
{
return Data[i];
}
};
如果要支持运行时已知大小的阵列,可以使用以下命令。但是,您需要了解The Rule of Three并确保正确实现复制构造函数和复制赋值运算符。
0