C++中常用的数据结构

一直以来虽然写的都是C++的代码但是基本上用的都是C的数据结构。这次实现一个相对大型的C++项目,发现了很多很有用的数据结构,通过使用这些数据结构,可以极大程度的提高开发效率。所以计划从实用的角度逐渐整理下C++中的数据结构以及他们的用法,以供自己以及小白参考。暂时不涉及时间性能。

std::string

std::string str = "aaa"; //初始化
str += "b"; // 可以直接做字符串拼接,比 char* 的使用简单很多 

std::vector

std::vector vec;
std::vector vec(3); // 深度为3的整型数据
std::vector vec(3, 1); // 深度为3的整型数据,初始化为1
vec.size() // 获得vec中元素的个数,也就是size(尺寸)
vec.push_back(2); // push 2到vec末尾中,深度增加1
vec.resize(5) // 重新设置vec的size,我一般是增加size,此时原有数据是不改变的,相比push_back()一个个的增加数据,这样做的效率会高一些。
vec.data() // 返回一个指向vec的pointer
vec.clear() //清空vec
// 而且std::vector非常灵活,可以和各种数据结构搭配使用:
std::vector> //二位数据如果列数固定,可以在里面使用array, 如果长度可调,可继续使用vector。个人意见是可以用array则用。
std::vector> vec_pair; // 定义了一个int+string的键值对数组
vec_pair.push_back(std::pair(1, "abc"));
std::cout << "vec_pair[0] = "( << vec_pair[0].first << ", " << vec_pair[0].second << ")\n"; 

std::array

// array用于size固定的数组,与内置数组相比更加安全,与vector相比有更高的性能
std::array arr1; //定义一个长度为8的数组
std::array arr2 = {1, 2, 3}; //初始化

std::pair

//支持各种pair组合
std::pair pair_ii;
std::pair pair_id;
std::pair pair_si("ls", 10);
std::cout << "pair_si=(" << pair_si.first << ", " << pair_si.second << ")\n";

std::map

map是一种(key,value)的键值对。

std::map root; //定义
std::map root = {{2, 3}, {5, 7}}; // 初始化赋值
root.insert(1, 10); // 插入赋值
std::map::iterator iter_a = root.find(a); //判断root中是否存在a
std::cout << root.at(2) << std::endl; // 基于key查找,输出对于的value
if (iter_a == root.end()){
	root[a] = 1; // 不存在,则可以直接赋值
} else {
	uint32_t root_a = iter_a->second; //存在,则可以获得该值
}

std::set

set也是一个特别有用的数据结构,利用它的唯一性,可以实现对整型数据去重和排序:

std::array arr{1, 3, 7, 3, 2, 6, 4, 4, 1, 5}; // 对arr进行去重并按照从小到大的顺序排序
std::set arr_sort;
for(int i = 0; i < arr.size(); i++)
	arr_sort.insert(arr[i]);
// result: arr_sort = {1, 2, 3, 4, 5, 6, 7};

// 也支持和其他数据结构配合使用,比如pair
std::set> set_pair;
set_pair.insert(std::pair(1, 2));
set_pair.insert(std::pair(1, 1)); // 它会会先按照first排序,然后second,同样也有去重的功能
for(std::set>::iterator iter=set_pair.begin(); iter!=set_pair.end(); iter++)
	std::cout << "set_pair=(" << iter->first << ", " << iter->second << ")\n";

上述这些数据结构,很多都是具有相同的基类,很多function可以直接无脑使用,比如:size(), data()… 当然还有很多很好用的function,这里没有涉及到,可以参见:http://www.cplusplus.com/reference/

后续计划使用到哪补充到哪。

你可能感兴趣的:(C++,数据结构,c++,算法)