简单随记

1~~ fill()函数和fill_n()函数和memset()函数之前的区别
fill() 和 fill_n() 算法提供了一种为元素序列填入给定值的简单方式,fill() 会填充整个序列; fill_n() 则以给定的迭代器为起始位置,为指定个数的元素设置值。下面展示了 fill() 的用法:
std::vector data {12}; // Container has 12 elements
std::fill (std::begin (data), std::end (data), “none”); // Set all elements to “none”

fill_n() 的参数分别是指向被修改序列的第一个元素的正向迭代器、被修改元素的个数以及要被设置的值。distance() 和 next() 函数定义在 iterator 头文件中。前者必须使用输入迭代器,而后者需要使用正向迭代器。

2~~ remove()函数和erase()函数的区别
有 4 种移除算法:
remove() 可以从它的前两个正向迭代器参数指定的序列中移除和第三个参数相等的对象。基本上每个元素都是通过用它后面的元素覆盖它来实现移除的。它会返回一个指向新的最后一个元素之后的位置的迭代器。
remove_copy() 可以将前两个正向迭代器参数指定的序列中的元素复制到第三个参数指定的目的序列中,并忽略和第 4 个参数相等的元素。它返回一个指向最后一个被复制到目的序列的元素的后一个位置的迭代器。序列不能是重叠的。
remove_if() 可以从前两个正向迭代器指定的序列中移除能够使作为第三个参数的谓词返回 true 的元素。
remove_copy_if() 可以将前两个正向迭代器参数指定的序列中,能够使作为第 4 个参数的谓词返回 true 的元素,复制到第三个参数指定的目的序列中。它返回一个指向最后一个被复制到目的序列的元素的后一个位置的迭代器。序列不能是重叠的。

3~~ 以后在简单顺序遍历输出一个数组或vector的值时,可以用for_each()函数
int c=0;
bool op(int a)
{
printf("%d “,a);
c++;
if(c==10)
puts(”");
return 1;
}

int main() {
int n[20];
fill(n, n + 20, 2);
for_each(n,n+20,op);
return 0;
}

4~~ 迭代器之间的相加减可以用int类型来接收
int main()
{
vectorvec1;
//vectorvec2;
vec1.push_back(5);
vec1.push_back(2);
vec1.push_back(6);
vec1.push_back(8);
vec1.push_back(1);
int x=min_element(vec1.begin(),vec1.end())-vec1.begin();
cout<<x<<endl;
return 0;
}
控制台输出:
在这里插入图片描述
将begin改成end
在这里插入图片描述
此时注意最小值1的位置在最后一个,而它减去end确是-1而不是0.
将语句改成int x=max_element(vec1.begin(),vec1.end())-min_element(vec1.begin(),vec1.end());
在这里插入图片描述
5~~ 求容器的大小还可以通过distance()函数
int x=distance(vec1.begin(),vec1.end());
在这里插入图片描述
6~~ 若要产生一些列随机序列,通过srand()和rand()函数配合产生,由srand()函数提供一个随机种子,rand()函数会根据这个随机种子产生随机序列,若这个随机种子不随机即不变,则rand()产生的序列式固定的,就不随机的,所以可以通过srand(time(NULL))来通过时间的变化来改变随机种子,time()的c语言头文件是time.h

7~~ nth_element(first,location,fast)函数的用法
nth_element()函数是将这个容器上变成location位置上的数,比在location左边的数都大,比在location右边的数都小。 nth_element(nums.begin(), nums.begin() + nums.size() / 2, nums.end());
8~~ 计算非负整数x二进制表示中1的个数的函数:__builtin_popcount(int x)。还可以通过
在这里插入图片描述计算非负整数n的二进制表示中1的个数,dist就是其个数。
9~~ 两个if之间加else和没加else是有区别的,没加else两个if判断语句都会执行,加else,若满足第一个if就不会执行第二个if
10~~ string中的单个字母是char类型,在C\C++中,char类型实际存储的是整数(即字母的ASCII值)
11~~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值