我有三个std :: vector。
typedef std::pair< double,double > A;
typedef std::vector< A > B;
typedef std::vector< B > C;
我知道如何访问B中的元素,如
B b;
b.at(0).first;
b.at(0).second;
And
C c;
如何使用容器变量c访问b的元素? 感谢
答案 0 :(得分:2)
C.at(0).at(0)
将访问B
的第一个元素。因为C
是B的容器。
答案 1 :(得分:2)
(我知道你(或某人)更新了问题,以解决typedef
s的缺失问题 - 只要将其与原始问题相关联,以防其他人帮助。)
您需要了解类型与该类型的对象/变量/实例之间的区别。例如,double
是一种类型,如果您说:
double x;
然后您定义了x
类型的变量double
,您可以在其中存储一个数字。
从某种意义上说,类型是说 如何 使用一些内存来记录该类型的值。类型不会被告知 他们要管理的内存 - 只有在您定义了该类型的一个或多个变量时才会这样做。
模板std::pair<>
和std::vector<>
期望其参数为类型:例如std::vector<int>
是参数std::vector
的{{1}}模板的实例化,并且它本身是一种可用于创建变量的新类型:
int
所以,你的代码:
std::vector<int> vi;
第一行创建一个名为std::pair< double,double > A;
std::vector< A > B;
std::vector< B > C;
的{{1}}类型的变量。
第二行尝试使用最后一行中的变量实例化A
,这将不起作用 - std::pair<double,double>
模板必须使用类型进行实例化。为了使其有效,我们需要:
std::vector<>
std::vector<>
关键字表示第一行正在为typedef std::pair< double,double > A;
std::vector< A > B;
创建替代名称,因此变量typedef
的上述定义完全等同于:
std::pair<double, double>
然后你的下一行重复第二行所做的刚刚修正的错误,用变量实例化一个模板。修复代码以创建二维向量:
B
创建std::vector< std::pair<double, double> > B;
类型的变量typedef std::pair< double,double > A;
typedef std::vector< A > B;
std::vector< B > C;
。
如果您某些 C
中的向量有足够的std::vector<std::vector<std::pair<double,double>>>
C
和size()
作为有效索引,那么您可以使用以下方式访问个人i
j
否则,您可以尝试访问索引doubles
,C[i][j].first;
C[i][j].second;
并让编译器在外部或内部向量太小时抛出异常:
i
答案 2 :(得分:1)
C.at(i)
是C中* * * B项的引用。
C.at(i).at(j)
是* j * th项目在* i * B项目参考中的引用。
您应该参考std::vector
的使用规范。