C++中,char*
和int[]
等类型都有所局限,刚好我是从Python转到C++的,所以比较喜欢用std::string
和std::vector
然而,之后我又知道了指针问题。指针确实速度更快(我记得测过,大约快3倍),不过std::string
和std::vector
既然是动态的内存管理,就必然会引发一些问题。因此我要提以下几个问题:
在
std::vector
元素类型是定长类型的情况下用下标、iter还是用指针?各自的优缺点是什么?std::vector<short> vec = {1, 3, 9, 2, 4, 3, 7, 3, 9, 5}; for (int i=0; i<10; i++) { vec[i] *= 2; }
std::vector<short> vec = {1, 3, 9, 2, 4, 3, 7, 3, 9, 5}; std::vector<short>::iterator iter = vec.begin(); while (iter != vec.end()) { *(iter++) *= 2; }
std::vector<short> vec = {1, 3, 9, 2, 4, 3, 7, 3, 9, 5}; short *p = &vec[0]; for (int i=0; i<10; i++) { *(p++) *= 2; }
- 针对
std::vector<std::string>
或std::vector<std::vector>
等嵌套的动态内存管理的情形,我除了用[]
访问还有什么更快且安全的办法? - 何时
std::vector
或std::string
才会出现指针的问题?原理是什么?迭代器呢?
我可能需要的回答:三种方法对于两种不同情况(1、2)各自的运行时间(时间复杂度等)、稳定性(会不会出意外情况)。
我想了好一会,发现居然完全不知道怎么回答....
只能说,对于初学者,
所以,2022年我们都是这么操作vector的