【问题标题】:Dealing with strings in c++ template在 C++ 模板中处理字符串
【发布时间】:2014-05-04 05:39:03
【问题描述】:

作为一些初学者 c++ 模板练习的一部分,我正在尝试编写一个模板作为 c++ 中 std::vector 的包装器,但遇到了一个障碍。

假设我将使用的变量类型是 int、double 和 string。

我正在尝试编写一个循环来填充向量:

type element;

while (element != 0){
  std::cout << "Enter an element, use 0 to exit: ";
  std::cin >> element;

  if(element != 0)
    items.push_back(element);
}

问题是,虽然这适用于 int & double,但它不适用于 std::string,因为 string 不支持 !=。我还可以看到自己在计算向量中的最大值/最小值时遇到了问题。

解决此问题的最佳方法是什么?

【问题讨论】:

    标签: c++ templates


    【解决方案1】:

    您可以提供一个可选的模板参数,它是一个比较器(我认为标准库经常这样做)。不那么雄心勃勃,您可以使用 type{} 来比较哪个应该适用于具有默认 ctor 的任何内容:if(element != type{})。 (您的问题不是字符串没有比较运算符,而是未定义运算符以与整数进行比较)。

    【讨论】:

    • 您能否通过示例或某些代码的链接来说明可选模板参数?
    • 例如cplusplus.com/forum/general/34569。谷歌搜索“c++ 可选比较器模板参数”左右会提供很多链接,但有时很难找到权威来源。一些标准库文档或教程应该会有所帮助。对于一般的可选模板参数,请参阅。 publib.boulder.ibm.com/infocenter/lnxpcomp/v8v101/….
    • +1,尽管恕我直言,接受 sentinel 值并使用正常的!= 进行比较更直接和直观:while (element != sentinel) - 一个好处是哨兵值可以在提示中流式传输:...use " &lt;&lt; sentinel &lt;&lt; " to exit: "...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-15
    • 2017-12-06
    • 2018-05-02
    • 2014-02-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多