一、std::fill
将一个给定值复制赋值给一个范围内的每个元素
std::vector使用fill()
之前要分配足够的空间,如果没有足够的空间会发生中断
示例
std::vector<int> vec2;
vec2.resize(6);
std::fill(vec2.begin(), vec2.begin() + 3, 9); //9,9,9,0,0,0
二、std::fill_n
将一个给定值复制赋值给一个范围内的 N 个元素
示例
std::vector<int> vec1;
vec1.resize(6);
std::fill_n(vec1.begin()+1, 3, 9); //0,9,9,9,0,0
三、std::copy
将某一范围的元素复制到一个新的位置
示例
std::vector<int> vec1;
std::vector<int> vec2;
vec1.resize(6);
vec2.resize(6);
std::fill_n(vec1.begin()+1, 3, 9); //0,9,9,9,0,0
std::fill(vec2.begin(), vec2.begin() + 3, 9); //9,9,9,0,0,0
//将vec1从开始的四个元素复制到vec2从第二个位置开始的地方,vec2:909990
std::copy(vec1.begin(), vec1.begin() + 4, vec2.begin() + 1);
std::copy_if
std::vector<int> vec1{ 1,2,3,4,5 };
std::vector<int> vec2{ 0,9,8,7,6 };
// vec2:45876,vec1:12345,将vec1中大于3的元素复制到vec2开始的位置
std::copy_if(vec1.begin(), vec1.end(), vec2.begin(), [](int i) {return i > 3; });
// vec2:45876345,将vec1大于2的元素从后面添加到vec2
std::copy_if(vec1.begin(), vec1.end(), std::back_inserter(vec2), [](int i) {return i > 2; });
四、strcpy
char *strcpy(char *dest, const char *src)
把 src 所指向的字符串复制到 dest。不能保证缓冲区大小,可能会发生不可预料的错误
示例
char* ch1 = new char[5]();//ch1为空
char* ch2 = new char[5]; //ch2是随机值
const char* ch3 = "abcdefgxyz";
auto ret1 = strcpy(ch1, ch3); //ch1:"abcdefgxyz",ret1:"abcdefgxyz"
strcpy_s
只能在VS下使用
函数原型:
errno_t strcpy_s(
char *dest,
rsize_t dest_size,
const char *src
);
成功返回0,其他值失败。
注意:sizeof("12345");
的值为6,后面还有一个结束符