提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言`
最近要做项目将python语言的代码转为c++,这里记录一下其中的数据结构转化,本文主要使用c++的vector来描述python的list数据结构。
一、list
list中python语言中常用的数据结构,其中常用操作如下所示:
# ---------------------------------------------
# 创建列表
# ---------------------------------------------
# 创建空列表
list1 =[]
# 创建非空列表
list2 = [1, 2, 3, 4, 5, 6, 7]
# list函数创建列表
list3 = list((1, 2, 3, 4))
# ---------------------------------------------
# 访问列表
# ---------------------------------------------
# 下标访问
# 正向索引:从下标0开始递增
# 反向索引:从下标-1开始递减
print(list2[0], " ", list2[-1])
# 切片操作(左开右闭)
print(list2[1:5:1])
# 赋值
list2[1] = 10
print(list2[1])
# 遍历列表
for i in list2:print(i)
# 存在元素
if 1 in list2:
print("1 in list")
else:
print("1 not in list")
# 合并列表
list4 = list2 + list3
print(list4)
# 二维列表
list5 = [list2, list3]
print(list5)
# ---------------------------------------------
# 内置方法
# ---------------------------------------------
# 尾插append
list2.append(15)
print(list2)
# 指定插入insert
list2.insert(1,11)
print(list2)
# 迭代extend
list1.extend(list2)
print(list1)
# 统计元素count
print(list1.count(1))
# 获取索引index
print(list1.index(15))
# 反转列表reverse
list1.reverse()
print(list1)
# 删除元素pop
list1.pop()
print(list1)
# 清空列表clear
list1.clear()
二、vector
vector是c++常用的容器,针对上述list的常用操作时我们可以用vector描述为:
// --------------------------------------------------
// 创建vector
// --------------------------------------------------
// 创建空vector
std::vector<int> vec1;
// 创建非空vector
std::vector<int> vec2 = { 1,2,3,4,5,6,7 };
// 参数构造
std::vector<int> vec3(vec2);
// --------------------------------------------------
// 访问vector
// --------------------------------------------------
// 下标访问
std::cout << vec2[0] << std::endl;
std::cout << vec2[vec2.size() - 1] << std::endl;
// 切片操作
std::vector<int> subvec1(vec2.begin() + 1, vec2.begin() + 5);
for (auto it:subvec1)
{
std::cout << it << std::endl;
}
// 赋值
vec2[1] = 10;
std::cout << vec2[1] << std::endl;
// 遍历
for (auto it : vec2)
{
std::cout << it << " ";
}
std::cout << std::endl;
// 存在元素
auto it = std::find(vec2.begin(), vec2.end(), 1);
if (it != vec2.end())
{
std::cout << "1 in vector" << std::endl;
}
else
{
std::cout << "1 not in vector" << std::endl;
}
//合并vector
std::vector<int> vec4 = vec2;
vec4.insert(vec4.end(), vec3.begin(), vec3.end());
for (auto it : vec4)
{
std::cout << it << " ";
}
std::cout << std::endl;
// 二维vector
std::vector<std::vector<int>> vec5 = { vec2,vec3 };
for (auto it1:vec5 )
{
for (auto it2 : it1)
{
std::cout << it2 << " ";
}
std::cout << std::endl;
}
// --------------------------------------------------
// 内置方法
// --------------------------------------------------
// 元素个数size
std::cout << vec2.size() << std::endl;
// 尾插push_back
vec2.push_back(15);
for (auto it : vec2)
{
std::cout << it << " ";
}
std::cout << std::endl;
// 插入insert
vec2.insert(vec2.begin() + 1, 11);
for (auto it : vec2)
{
std::cout << it << " ";
}
std::cout << std::endl;
// 迭代
vec1.insert(vec1.end(), vec2.begin(), vec2.end());
for (auto it : vec1)
{
std::cout << it << " ";
}
std::cout << std::endl;
// 统计元素cout
std::cout << std::count(vec2.begin(), vec2.end(), 1) << std::endl;
// 查找元素
std::cout << std::find(vec2.begin(), vec2.end(), 15) - vec2.begin() << std::endl;
// 反转vector
std::reverse(vec1.begin(), vec1.end());
for (auto it : vec1)
{
std::cout << it << " ";
}
std::cout << std::endl;
// 删除元素 pop_back
vec1.pop_back();
for (auto it : vec1)
{
std::cout << it << " ";
}
std::cout << std::endl;
// 清空vector clear
vec1.clear();
总结
本文主要针对python转c++时对list的常用操作利用vector进行简单描述,新人能力有限,如有不足之处欢迎大佬指点纠正。