C++ STL

C++ STL

Vector

拷贝方法

vector<int> list;

// 1. initialization
vector<int> copy_(list);

// 2. assgin (copy)
copy_.assign(list.begin(),list.end());

// 3. swap, the original one is empty
copy_.swap(list);

// 4. insert, insert the original one into the new vector
copy_.insert(copy_.end(), list.begin(), list.end());
// the first argument can change to decide where to insert
  • .data() returns the pointer to the first element.

vector 不论是 = 还是拷贝构造函数都是深拷贝。

初始化

// 默认值初始化
vector<float> mvuRight(N,-1.0f);
vector<vector<size_t> > vRowIndices(nRows,vector<size_t>());

// 预分配空间 .reserve() 方法
vector<pair<int, int> > vDistIdx;
vDistIdx.reserve(N);

内存管理

参考 cherno 的视频,讨论稿方法 .reserve / .push_back / .emplace_back 使用。

.reserve() :当存入向量的元素数量超过分配的内存,向量会重新开辟新的内存,然后将旧的内容全部拷贝到新的内存中。为了避免多次拷贝,可以一开始就给向量分配内存。

// reserve 只是分配空间,但是没有初始化相应地址处的值
std::vector<int> vec;
vec.reserve(N);

// 初始化了 N 个实例
std::vector<int> vec(N);

.push_back (all) & .emplace_back (C++11 or newer)

.push_back 是先构造一个实例,然后将此实例拷贝到容器末尾。.emplace_back 是直接在容器的末尾构造对象。相比而言,.push_back 会多一次拷贝过程。

String

  • 字符串替换
s.replace(pos, n, s1); // 用s1替换s中从pos开始(包括)的n个字符的子串
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值