微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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> (例如,它们都有指向其内存位置,大小,容量的指针),但这两个类的功能是不同的.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐