c – stl – 字符串是向量吗?

前端之家收集整理的这篇文章主要介绍了c – stl – 字符串是向量吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在一些测验中遇到了一个问题
“字符串是一个向量吗?如果是,以什么方式?如果不是,为什么不呢?”
他们都可以随意访问内容.
但是字符串有一些矢量dosn`t的方法.它也可能有引用计数.
很明显,字符串不是一个向量(typedef字符串向量)
是否已知类字符串的实现:public vector< char>?
如果不是 – 那么不实施它的原因是什么?

解决方法

从纯粹的哲学观点来看:是的,字符串是一种向量.它是一个存储字符的连续内存块(向量是一个存储任意类型对象的连续内存块).因此,从这个角度来看,字符串是一种特殊的向量.

在std :: string和std :: vector的设计和实现方面,它们共享一些相同的接口元素(例如连续的内存块,operator []),但是std :: string不是从std :: vector派生的(旁注:您不应该公开从标准容器派生,因为它们不是基于类的 – 例如它们没有虚拟析构函数,也不能直接相互转换.也就是说,以下内容将无法编译:

std::string s = "abc";
std::vector<char> v = s; // ERROR!

但是,由于它们都具有迭代器支持,因此您可以将字符串转换为向量:

std::string s = "abc";
std::vector<char> v(s.begin(),s.end()); // note that the vector will NOT include the '\0' character

std :: string将不再具有引用计数(从C 11开始),因为C 11标准禁止许多实现使用的写时复制功能.

从内存的角度来看,std :: string的实例看起来非常类似于std :: vector< char> (例如,它们都有指向其内存位置,大小,容量的指针),但这两个类的功能是不同的.

猜你在找的C&C++相关文章