你可以写出vector<int[10]> vec这样的定义,这在大部分编译器下都是可以通过编译的,但没有任何用处。因为数组不支持=赋值操作符,在push_back的时候会有问题。用vector<vector<int>>应该很容易达到你要的效果。
如果非要用数组的话,折中的方法我想到的有两种:
1. 使用vector<int*> vec这样的定义,访问数组数据时用计算地址的方法代替索引。比如:
int a[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9,};
vec.push_back(a);
int res = *(vec[0] + 3); // res = 3
2.使用一个类对数组进行一次包装,然后重载该类的=操作符。比如:
class A
{
public:
int a[10];
A& operator=(const A& aa)
{
for(int i = 0; i < 10; i++)
a[i] = aa.a[i];
}
};
这样可以用vector<A> vec定义完成类似的功能。如:
A r1; r1.a = {1, 2, 3, ....} (这一行是伪代码)
A r2; r2.a = {1, 3, 5, ....} (伪代码)
vec.push_back(r1);
vec.push_back(r2);
int res = vec[0].a[0]; // res = 1
res = vec[1].a[1];// res = 3
以上。望采纳。
追问谢谢大神详细的回答~如果还是定义一个类,类对象是vector,vector的元素是结构体,结构体中又套了另一个结构体,这种情况又该怎么办呢?结构体是的定义是应该在类内还是类外呢?
追答struct AS
{
int a;
};
struct BS
{
int b;
AS as;
};
class CS
{
public:
vector bvec;
};
类似于这样就可以。定义在类的内部也可以,C++支持内部类定义。不过从外部访问的时候要用::操作符。