-1

我有一个包含一些值的 C 样式数组。我需要它成为内存经济的映射(不是一次全部分配并保留而是根据需要分配)......它可以制成一个集合或进一步优化一个向量。但是我遇到了一个痛苦的陷阱:val * v; auto val_index = v - val_collection曾经给项目ID......现在这样的代码将无法编译。它会在 std::vector 的情况下吗?

4

1 回答 1

2

std::distance可以为您提供与容器(或其他序列)开头的距离:

std::vector<val>::iterator v = whatever();
size_t val_index = std::distance(val_collection.begin(), v);

对于随机访问容器(包括vector,但不包括map),如果您愿意,也可以使用-

size_t val_index = v - val_collection.begin();
于 2013-03-25T15:14:05.190 回答