【问题标题】:What is the use of value_type in STL containers?STL 容器中 value_type 的用途是什么?
【发布时间】:2021-08-08 01:44:28
【问题描述】:

value_type 在 STL 容器中有什么用?

来自 MSDN:

// vector_value_type.cpp
// compile with: /EHsc
#include <vector>
#include <iostream>

int main( )
{
   using namespace std;
   vector<int>::value_type AnInt;
   AnInt = 44;
   cout << AnInt << endl;
}

我不明白value_type 在这里实现了什么? 变量也可以是int?使用它是因为编码人员懒得检查向量中存在的对象类型是什么?

我觉得这些也和allocator_type,size_type,difference_type,reference,key_type等类似。

【问题讨论】:

  • 考虑 C++03。 std::vector&lt;T&gt; 的正确元素类型是什么?
  • 这没有回答问题,但你真的需要std::endl 需要的所有东西吗? '\n' 结束一行。

标签: c++ stl


【解决方案1】:

是的,在您的示例中,很容易知道您需要int。它变得复杂的地方是泛型编程。例如,如果我想编写一个通用的 sum() 函数,我需要它知道要迭代的容器类型及其元素的类型,所以我需要这样的东西:

template<typename Container>
typename Container::value_type sum(const Container& cont)
{
    typename Container::value_type total = 0;
    for (const auto& e : cont)
        total += e;
    return total;
}

【讨论】:

  • 这和在函数声明中只返回Container有什么区别?
  • @bigbrownbear00 当您想要所有元素的总和时,您不希望返回整个容器。你只需要一个容器持有的类型的对象。
  • 如果你想支持多个容器,那么我明白你为什么要这样做。但是如果你发送了一个向量,你可以只返回模板类型。
  • @BigBrownBear00 编写通用代码的重点是尽可能通用。当然我可以使用template&lt;typename T&gt; T sum(const std::vector&lt;T&gt;&amp; cont),但这限制了代码。我在函数中使用的版本将支持任何可以在基于范围的 for 循环中使用的容器,这使得它更加通用。
  • 这也有利于使代码面向未来,如果您更改要传递给sum 的对象类型,则无需更改函数调用。跨度>
猜你喜欢
  • 1970-01-01
  • 2019-08-26
  • 1970-01-01
  • 1970-01-01
  • 2011-05-06
  • 2013-07-21
相关资源
最近更新 更多