iam*_*ind 2 c++ iterator stl design-decisions
迭代一个std::map
或std::vector
任何包含在其中的容器iterator
时,会检查variable.end()
而不是类似的东西container<>::end
.例如,
map<int, int> var;
for(map<int, int>::iterator it = var.begin(); it != var.end(); it++)
... ^^^^^^^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)
上面突出显示的部分不能是这样的:
it != map<int,int>::end
Run Code Online (Sandbox Code Playgroud)
这与静态成员类似string::npos
.设计决策背后提供.end()
每个变量基础而不是每种类型的集装箱基地的原因是什么?(即map<int,int>::end
并且map<int,double>::end
会有所不同;但对于每个map<int,int>
变量,它们::end
都是相似的.)
考虑以下两个数组:
int a1[] = {2, 3, 4};
int a2[] = {5, 6, 7};
Run Code Online (Sandbox Code Playgroud)
过去两个数组的最后一个元素是不同的:
int *p1 = a1 + 3; // for a1
int *p2 = a2 + 3; // for a2
Run Code Online (Sandbox Code Playgroud)
您不能将一个指针用于另一个指针.没有通用常量来表示数组末尾.以下是错误的:
for (int *p = a1; p != a2; p++)
Run Code Online (Sandbox Code Playgroud)
end()
对于相同类型的容器迭代器,没有相同的解释是类似的.
归档时间: |
|
查看次数: |
1726 次 |
最近记录: |