p324 关于vector的测试

1.vector的构造函数中,接受两个迭代器的版本,经过层层调用,实际上就是使用了泛型算法copy。

2.vector的迭代器实际上就是指针类型。所以函数会将它的迭代器看作是T*类型,而不是普通的RandomAccessIterator。它会进入偏特化版本。

2.自定义的类型,即使它实际上具有trivial operaotr=,但是编译器不会自动检测这一点。编译器只能知道内置类型比如int、char、long等的trivial特性。如果我们想让自定义类型的travial特性被编译器识别,就必须自己为它做特性设定。

具体来说,就是自定义一个__type_traits类的偏特化版本:

<>
struct __type_traits<C> {
	...
	typedef __true_type has_trivial_assignment_operator;
	...
}

这里的C就是我们自定义的类。

### C++ `vector` 的基本操作 #### 创建并初始化向量 可以创建一个未指定大小的 `vector<int>` 并通过指针动态分配内存来存储多个整数值。例如: ```cpp #include <iostream> #include <vector> using namespace std; int main() { vector<int>* p; p = new vector<int>{1, 2, 3}; for (int i = 0; i < p->size(); i++) { cout << p->at(i) << ' '; } } ``` 这段代码展示了如何声明指向 `vector<int>` 类型对象的指针变量 `p`, 动态分配一个新的 `vector<int>` 对象给这个指针,并打印其元素[^1]。 #### 遍历向量中的元素 除了上述方式外,还可以利用迭代器遍历整个容器内的数据项: ```cpp #include <iostream> #include <vector> using namespace std; int main(){ vector<int> v1(10, 1); vector<int>::iterator it = v1.begin(); while(it != v1.end()){ cout << *it << " "; ++it; } } ``` 此段代码定义了一个包含十个初始值均为1的整数类型的向量v1,并使用迭代器访问每一个位置上的元素[^2]. #### 向向量添加新元素以及移除最后一个元素 为了增加新的项目到现有列表里或者删除最后面的一项,可分别调用成员函数 `push_back()` 和 `pop_back()` : ```cpp #include <iostream> #include <vector> using namespace std; int main(){ vector<int> v; v.push_back(1); v.push_back(2); v.push_back(3); for(int i:v){ cout<<i<<" "; } v.pop_back(); for(int i:v){ cout<<i<<" "; } } ``` 这里先往空的向量中追加三个数字作为测试样本;接着再次循环输出当前状态下的全部成分;随后执行一次弹栈动作以去除队列末端的数据记录;最终重复一轮展示剩余条目的过程[^4].
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值