【问题标题】:Is there anything similar to Python's indexing in c++?有什么类似于 Python 在 c++ 中的索引吗?
【发布时间】:2018-09-17 15:23:09
【问题描述】:

我正在使用 C++ 中的字符数组的一部分,并试图找出最简单的方法来做到这一点。我知道在 Python 中你可以简单地做一些类似 str[1:] 的事情,它会给你除了第一个位置之外的整个数组,并且想知道 C++ 是否有任何类似物,或者如果没有,实现这个的最简单方法是什么。

【问题讨论】:

  • 您可以通过迭代器和范围获得类似的东西,但更冗长。例如,std::next(std::begin(str), 1)std::end(str) 的范围将是 str,但第一个元素除外。
  • 在大多数通过命名子字符串操作表示的语言中,名称如substrleftmidright。第一个来自 C++,后三个来自一些 Basic。为了提高效率,请查看std::string_view
  • 你可以使用std::string::substr(1)
  • 在 C++17 中有 std::strigng_view(或者对于旧的 C++ 版本提升 strigng_view)。还有类似std::valarray 的东西,其中slice 的功能与python 运算符[] 非常相似。
  • 注意:Python 中的这个特性称为切片。只是想我会给您这个术语,以便您将来可以进行更有效的搜索。

标签: python c++ arrays string indexing


【解决方案1】:

目前,您可以尝试将 Boost.Rangesliced 等)库用作仅标题的库(在 theboostcpplibraries.com 上有一个关于它的 chapter)。

库文档中的示例:

#include <boost/range/adaptor/sliced.hpp>
#include <boost/range/algorithm/copy.hpp>
#include <boost/assign.hpp>
#include <iterator>
#include <iostream>
#include <vector>

int main(int argc, const char* argv[])
{
    using namespace boost::adaptors;
    using namespace boost::assign;

    std::vector<int> input;
    input += 1,2,3,4,5,6,7,8,9;

    boost::copy(
        input | sliced(2, 5),
        std::ostream_iterator<int>(std::cout, ","));

    return 0;
}

未来标准中可能会有一个叫做span&lt;T&gt;的东西(讨论here)。

【讨论】:

    猜你喜欢
    • 2011-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多