我自己就是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本质上是一个类,所以访问将使用一个函数。
答案 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)
是的,这是正常的方式。您只需使用方括号即可通过索引访问向量的每个维度。