关闭

STL 中的容器们(三)

标签: stlvector
401人阅读 评论(0) 收藏 举报
分类:

二维vector的初始化

使用vector::vector(count, value)的构造函数来接收一个大小参数以及一个默认值。

vector<vector<int>> Mat(10, vector<int>(10, 8));

我们要创建一个 3 行 4 列的二维向量,全部元素初始化为 0;

std::vector<std::vector<int>> mat(3, std::vector<int>(4, 0));

我们也可使用C++11引入的uniform initialization

vector<vector<int>> Mat{{1, 1, 1}, {2, 2, 2}};

set的添加动作

std::set<std::string> ss;
ss.insert("hello");
ss.insert("hello");
ss.insert("world");

提供 find 成员方法的容器

  • (1)string
    返回值为size_type,也即整型值

  • (2)set

  • (3)map

    std::map<K, V>::const_ietrator ite = m.find(val);
    return ite->second;

vector::resize() vs vector::reserve()

  • resize()不仅分配内存,而且创建实例
  • reserve()仅仅分配内存,不进行初始化

  • resize()影响size(),reserve()只影响capacity()

  • resize()可大可小,长度变小时,调用后添加进的元素的析构函数;

#include <iostream>
#include <vector>
using namespace std;

class A
{
public:
    A() { cout << "A::A()" << endl;}
    ~A() { cout << "A::~A()" << endl;}
};

int main(int, char**)
{
    vector<A> as, bs;
    as.resize(3);
                    // A::A()
                    // A::A()
                    // A::A()
    bs.reserve(5);
                    // 什么也没有输出

    as.resize(1);
                    // 调用两次析构函数,使size为1
    return 0;
}
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:2042126次
    • 积分:57394
    • 等级:
    • 排名:第48名
    • 原创:3922篇
    • 转载:38篇
    • 译文:1篇
    • 评论:136条
    博客专栏
    文章分类
    我的微博
    最新评论