访问std :: vector容器中的数据

时间:2014-02-19 02:24:52

标签: c++ std stdvector

我有三个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的元素? 感谢

3 个答案:

答案 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>>> Csize()作为有效索引,那么您可以使用以下方式访问个人i

j

否则,您可以尝试访问索引doublesC[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的使用规范。