C ++中的Access Vectors索引

时间:2017-07-28 19:55:43

标签: c++ vector

我自己就是Java人,但我正在尝试调试C ++代码。我们如何在C ++中的给定索引处访问Vector的值?

有一个3D Vector初始化为:

vector<vector<vector<uint32_t> > > samples_durations;

我假设(像其他语言一样)使用类似samples_durations.get(0,0,0)的命令来访问它们,但我看到的只是类似于数组的访问samples_durations[0][0][0]

这是它在C ++中的正常工作方式吗?!我认为因为vector本质上是一个类,所以访问将使用一个函数。

2 个答案:

答案 0 :(得分:4)

使用索引访问矢量有两种方法。您可以使用DEPRECATED: Use of this script to execute mapred command is deprecated. Instead use the mapred command for it. 17/07/28 16:02:10 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable 17/07/28 16:02:10 INFO client.RMProxy: Connecting to ResourceManager at /0.0.0.0:8032 Total jobs:1 JobId State StartTime UserName Queue Priority UsedContainers RsvdContainers UsedMem RsvdMem NeededMem AM info job_1501270163820_0001 PREP 1501270430437 vaughn root.vaughn NORMAL 0 0 0M 0M 0M http://vaughn-notebook:8088/proxy/application_1501270163820_0001/ 进行边界检查,也可以使用at进行边界检查。这意味着什么时候有

operator[]

您要么使用

vector<vector<vector<uint32_t> > > samples_durations;

samples_durations[0][0][0]

通常说samples_durations.at(0).at(0).at(0) 并不是你想要建立数据的方式。 vector<vector<vector<uint32_t> > >元素是连续的,但底层缓冲区不需要在内存中彼此相邻。这可能会在迭代时导致大量缓存未命中。通常,您所使用的是使用足够大的单维向量来存储所有元素,然后将其包装在重载std::vector的类中以访问数据。这给你构造像

operator()

答案 1 :(得分:1)

是的,这是正常的方式。您只需使用方括号即可通过索引访问向量的每个维度。