【问题标题】:Create a python like list in c++在 C++ 中创建一个类似 Python 的列表
【发布时间】:2020-09-05 09:20:35
【问题描述】:

我有一个 python 脚本,我必须用 c++ 翻译,我的 python 脚本有 80% 是基于列表的。

我有一个我读过的文件,并将该文件的数据放在一个列表中:

//Code to translate in c++
bloc = [line]
for b in range(11):
    bloc.append(lines[i + 1])
    i += 1

我用这些数据制作我的东西,然后我再做一次,直到我读完整个文件。

最后,我希望能够通过以下方式获取此列表的数据:

#Python script
var = bloc[0, 1, 2, 3 ...]

我会回答您需要更多信息的任何问题

【问题讨论】:

标签: python c++ list translate


【解决方案1】:

最接近 python List 的 C++ 容器是 std::vector。然而,与 python 不同的是,std::vector 仅包含一种类型的元素。您必须声明向量将包含什么。 在您的情况下,它将是 std::string(从文件中读取)。

所以:

std::vector<std::string> cpp_list; // container for lines (stored as string )from the file 

相当于pythonpython_list = [] 应该让你开始。

使用std::vector,您不需要预先分配存储空间,但出于性能原因,最好提前知道所需的大小。

  • 如果你使用cpp_list.reserve(something)或者不做任何内存分配,你必须使用cpp_list.push_back(...)推入向量,类似于pyhton_list.append(...)
  • 如果您预先分配内存,例如:std::vector&lt;std::string&gt; cpp_list(nb_lines) 您必须像在 python 中一样使用索引,例如 cpp_list[3] = something

【讨论】:

  • 你能给我看一个像我的python脚本一样的程序吗?我正在尝试这样做,但我有这个错误:错误:没有匹配的成员函数调用'push_back'
  • 你好。请分享您的代码,我们将从那里开始。
  • 关于“如果你预先分配内存......你必须像在python中那样使用索引,这样对吗?我发现 push_back 在预分配内存后可以正常工作
  • 你好 morganstark47。分配(例如调整大小)和预分配(保留)在 c++ 中是不一样的。如果你调用reserve,那么向量内部索引从0开始。你推回的元素确实从pos 0开始,然后是1,...如果你分配大小N,内部索引从N-1开始。你仍然可以做 push_back 但元素将从 N-1 位置添加
猜你喜欢
  • 2010-10-02
  • 1970-01-01
  • 2010-10-01
  • 2014-05-06
  • 1970-01-01
  • 1970-01-01
  • 2021-05-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多