1、顺序容器:将单一类型的元素聚合起来成为容器,然后根据位置来存储和访问这些元素。
2、要定义某种特殊类型的容器,必须在容器名后加一对尖括号,尖括号里面提供容器中存放的元素的类型。
3、将一个容器复制给另一个容器时,类型必须匹配,容器类型和元素类型都必须相同。
4、容器元素类型必须满足以下两个约束:元素类型必须支持赋值运算;元素类型的对象必须可以复制。
5、引用不支持一般意义的赋值运算,因此没有元素是引用类型的容器。
6、IO库类型不支持复制或赋值,因此不能创建存放IO类型对象的容器。
7、在指定容器元素为容器类型时,必须按如下形式使用空格:
vector < vector<string> > lines;
8、list容器的迭代器既不支持算术运算,也不支持关系运算,它只提提供前置或后置的自增、自减运算以及相等(不等)运算。
9、需要使用元素类型时,只需要value_type即可,如果要引用该类型,则通过reference和const_reference类型实现。
10、由于迭代器可能指向超出容器末端的下一位置,这是一个不存在的元素,因此insert函数是在其指向位置之前而非其后插入元素。
11、切忌将end操作返回的迭代器值存储在局部变量中,否则存储的迭代器很可能失效。
除非注明,文章均为CppLive 编程在线原创,转载请注明出处,谢谢。
😛 大胆给哥们几点建议:关于3,可以使用迭代器或指针来进行容器类型不匹配的容器复制。关于7,只需要将两个的地方用空格隔开,因为编译器会误当作移位操作符<>,据说有些新的编译器,已经支持关于这一点的智能判断,但我没试过。关于11,这点其实并没有禁忌,当容器有插入或删除操作的时候,存储起来的末端迭代器会失效,这种情况下要注意,如果可以确保不发生插入或删除操作,将末端迭代器存储起来还能提高效率,这一点不记得哪本书上说过,c++ primer 好像也只是推荐我们每次使用末端迭代器时调用end获得,而不存储。
嘿嘿,谢谢Adoo兄指教,关于7,只要不被编译器误解为“<<”即可,其他空格属于个人编程风格问题;关于11,用“切忌”俩字不过为了让自己提高警惕而已,就跟“==”操作符最好将左值放右边一样;关于3,还真是学习了~ 😛