gpt4 book ai didi

c++ - 在哪里可以找到 C++ STL 中 vector 的 size_type 定义?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:53:56 24 4
gpt4 key购买 nike

将 vector 的 size() 函数的结果转换为 unsigned int 似乎是安全的。不过,我怎么能确定呢?我的文档不清楚 size_type 是如何定义的。

最佳答案

不要假定容器大小的类型(或在其中键入的任何其他内容)。

今天?

目前最好的解决方案是使用:

std::vector<T>::size_type

其中 T 是您的类型。例如:

std::vector<std::string>::size_type i ;
std::vector<int>::size_type j ;
std::vector<std::vector<double> >::size_type k ;

(使用 typedef 可以帮助使其更好地阅读)

对于迭代器和“内部”STL 容器中的所有其他类型也是如此。

在 C++0x 之后?

当编译器能够找到变量的类型时,您就可以使用 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
}

编辑:JF 的问题

What if he needs to pass the size of the container to some existing code that uses, say, an 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 */
}

第二种是自己进行转换,使用 static_cast,使用一个函数来断言值是否超出目标类型的范围(有时,我看到代码使用“char”,因为,“你知道,索引永远不会超过 256“[我从内存中引用])。

我相信这本身就是一个完整的问题。

关于c++ - 在哪里可以找到 C++ STL 中 vector 的 size_type 定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/226302/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com