vector <double> :: size_type与alternative </double>

时间:2014-01-21 20:25:32

标签: c++

我的背景主要是R,SAS和VBA,我试图学习一些C ++。我已经选择了#34;加速C ++&#34; (Koenig,Moo)是我关于这个主题的第一本书。我的理论背景。 SCI。诚然,这不是最强大的,这或许可以解释为什么我对这些观点感到困惑。

我对一段类似于以下内容的代码有疑问:

#include <iostream>
#include <vector>

int main() {

   double input;
   std::vector<double> example_vector;

   while (std::cin >> input) {
      example_vector.push_back(input);
   } 

   std::vector<double>::size_type vector_size;
   vector_size = example_vector.size();

   return 0;
}

据我了解,vector_size已足够大了#34;保持example_vector的大小,无论example_vector多大。我不确定我理解这意味着什么:vector_size(在这种情况下)是否能够表示大于long long x;的整数,以便std::cout << vector_size;打印出来与std::cout << x;不同的价值?如何/为什么?

3 个答案:

答案 0 :(得分:3)

这个问题归结为标准不强制vector<T>::size()方法返回的实际类型。不同的实现可以做出不同的选择

因此,如果您希望将对size()的调用返回的值赋给变量,那么您应该为该变量使用什么类型?为了编写可跨不同实现移植的代码,您需要一种方法来命名该类型,并认识到标准库的不同实现可能使用不同类型的事实。

答案是vector<T>提供了您应该使用的类型。它是

vector<T>::size_type

您需要了解并习惯使用C ++的一件事是标准确实需要满足不同实现之间的重大差异。

答案 1 :(得分:0)

std::vector<T>::size_type正是标准所暗示的,即您的实现当前用于允许存储大小的类型。

历史上,架构已发生变化,需要代码解析器,重新测试以及其他基本的时间浪费。遵循这些标准,您的代码现在和将来都可以在任何兼容的平台上运行。

因此,您的代码可以在支持16bit架构和理论上256bit架构的情况下工作。

因此,如果您更改平台,您很可能只会将其视为size_t,您不必担心。更重要的是,无论谁维护你的代码都不需要。

答案 2 :(得分:-1)

在vector类(以及许多其他类)中,它们有一个typedef:

typedef **implementation_defined** size_type;

“size_type”可能使用size_t也可能不使用size_t。 也就是说,size_t总是足以覆盖你所有的内存(可能是32位或64位)。请注意,size_t可能总是足够大以覆盖你的所有内存(在至少只要你在桌面计算机上编程,但这不能保证。

此外,要知道变量的大小,以及它可以容纳多少,你可以使用sizeof。

因此,这将为您提供size_type类型的实际大小:

std::cout << sizeof(std::vector<double>::size_type) << std::endl;
根据您的处理器和编译器,

将是4或8。最大尺寸定义为2×8的功率(即2功率32或2功率64。)