cplusplus网站vector::assign示例代码疑问:second容器大小为何为5
代码执行逻辑拆解
- 第一步执行
first.assign(7, 100):调用std::vector的assign的计数+值重载,给first填充7个值为100的int元素,此时first的有效元素下标为0~6,共7个元素。std::vector的迭代器遵循左闭右开规则,first.begin()指向下标0的元素,first.end()是指向末尾元素之后的尾后迭代器(对应虚位下标7)。 - 第二步执行
it = first.begin() + 1:迭代器it指向first下标为1的元素。 - 第三步执行
second.assign(it, first.end() - 1):这里触发的是assign的迭代器区间重载,会把两个迭代器构成的左闭右开区间内的所有元素赋值给second:- 区间左边界是
it,对应下标1,包含该位置元素 - 区间右边界是
first.end() - 1,即尾后迭代器减1,指向first下标为6的最后一个有效元素,左闭右开规则下不包含该右边界位置的元素 - 区间覆盖的下标为
1、2、3、4、5,共5个元素,因此second最终大小为5,每个元素值都是100。
- 区间左边界是
误解原因说明
你混淆了assign的两个重载:当传入的两个参数分别是整型和元素值时,才会触发「N个相同值」的赋值逻辑;此处传入的两个参数都是迭代器类型,只会触发区间赋值逻辑,不会把迭代器对应的值100当作元素个数处理。
内容的提问来源于stack exchange,提问作者Foqia Shahid
相关产品推荐
相关产品推荐

