我应该在我的代码中使用size_type吗?

Baz*_*Baz 3 c++

我有一组不同类型的容器,每个容器都与一个字符串id相关联.如果关联的容器不为空,则以下函数应打印id.

如果我想将std :: vector的大小传递给函数,我应该将它作为size_type对象传递吗?像这样:

void printIfNotEmpty(const std::string& id, size_type sizeOfContainer)
{
   if(sizeOfContainer)
   {
     output << id << " is not empty";
   }
   else
   {
     output << id << " is empty";
   }
}
Run Code Online (Sandbox Code Playgroud)

如果是这样,size_type在什么命名空间中?如何在代码中包含其定义?

也许这是一个解决方案:

template<class T>
void printIfNotEmpty(const std::string& id, const T& container)
{
  if(container.size())
  {
     output << id << " is not empty";
  }
  else
  {
     output << id << " is empty";
  }
}
Run Code Online (Sandbox Code Playgroud)

Mik*_*our 6

我应该将它作为size_type对象传递吗?

这是最便携的事情.(顺便说一句,它不是一个类对象的"对象";它是一个无符号整数类型,大到足以表示任何向量的大小).

如果你知道它是带有标准分配器的向量,并且将来不太可能改变,那么使用它可能不那么冗长std::size_t.

(当然,在这个简单的例子中,传递一个布尔标志,或者删除条件并使调用者负责决定是否调用该函数更有意义;但我假设它的目的是表示更复杂传递大小有意义的情况).

如果是这样,size_type在什么命名空间中?

每个标准容器(以及为满足标准容器要求而设计的任何其他容器)将其定义为嵌套类型.

如何在代码中包含其定义?

定义是<vector>; 你必须将它限定为std::vector<whatever>::size_type.

std::size_t定义于<cstddef>.