有啥类似于 Python 在 c++ 中的索引吗?

Posted

技术标签:

【中文标题】有啥类似于 Python 在 c++ 中的索引吗?【英文标题】: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 中的这个特性称为切片。只是想我会给您这个术语,以便您将来可以进行更有效的搜索。 【参考方案1】:

目前,您可以尝试将 Boost.Range(sliced 等)库用作仅标题的库(在 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)。

【讨论】:

以上是关于有啥类似于 Python 在 c++ 中的索引吗?的主要内容,如果未能解决你的问题,请参考以下文章

Python中是不是有类似于C++ STL map的结构?

MySQL中的Field()在hive中有啥功能吗?

Sublime Text 导入 php 类有啥解决方案吗?类似于 Netbeans 上的“快速导入”的东西?

Python中列表和字典有啥区别,分别适用于啥

c++ 中的 dynamic_cast 有啥替代方法吗?

c++ 中的 map 和 unordered_map 在内存使用方面有啥区别吗?