pae*_*bal 11
不要假设容器大小的类型(或其他任何内部类型).
现在最好的解决方案是使用:
std::vector<T>::size_type
Run Code Online (Sandbox Code Playgroud)
T是你的类型.例如:
std::vector<std::string>::size_type i ;
std::vector<int>::size_type j ;
std::vector<std::vector<double> >::size_type k ;
Run Code Online (Sandbox Code Playgroud)
(使用typedef可以帮助更好地阅读)
迭代器和所有其他类型的"内部"STL容器也是如此.
当编译器能够找到变量的类型时,您将能够使用auto关键字.例如:
void doSomething(const std::vector<double> & p_aData)
{
std::vector<double>::size_type i = p_aData.size() ; // Old/Current way
auto j = p_aData.size() ; // New C++0x way, definition
decltype(p_aData.size()) k; // New C++0x way, declaration
}
Run Code Online (Sandbox Code Playgroud)
如果他需要将容器的大小传递给一些使用unsigned int的现有代码,该怎么办? - JF
这是使用STL时常见的问题:如果没有一些工作,你就无法做到.
第一种解决方案是将代码设计为始终使用STL类型.例如:
typedef std::vector<int>::size_type VIntSize ;
VIntSize getIndexOfSomeItem(const std::vector<int> p_aInt)
{
return /* the found value, or some kind of std::npos */
}
Run Code Online (Sandbox Code Playgroud)
第二个是自己进行转换,使用static_cast,使用一个函数,如果值超出目标类型的边界将断言(有时,我看到代码使用"char",因为," 你知道,索引将会永远不要超过256 "[我引用记忆]).
我相信这本身就是一个完整的问题.
归档时间: |
|
查看次数: |
8307 次 |
最近记录: |