我有以下代码。
#include <stdio.h>
#include <string.h>
#define MAXLINE 1000
int main()
{
int i;
char s[MAXLINE];
for (i = 0; i < 20; ++i) {
s[i] = i + 'A';
printf("%c", s[i]);
}
printf("\nstrlen = %d\n", strlen(s)); // strlen(s): 20
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我应该写吗
s[i] = '\0';
Run Code Online (Sandbox Code Playgroud)
在循环执行后显式标记字符串的结尾还是自动完成?没有s[i] = '\0';函数 strlen(s) 返回正确的值 20。
尝试理解 C++ 中的迭代器。例如,在下面的代码中我们打印一个向量。
using Iterator = vector<int>::iterator;
void PrintRange(Iterator range_begin, Iterator range_end) {
for (auto it = range_begin; it != range_end; ++it) {
cout << *it << " ";
}
}
int main() {
vector<int> numbers = {5, 3, 2, 1};
PrintRange(begin(numbers), end(numbers));
return 0;
}
// 5 3 2 1
Run Code Online (Sandbox Code Playgroud)
我的问题是如何正确编写一个仅需要两个迭代器并修改向量的函数。例如,函数 my_sort 对向量进行排序,如果我们写
my_sort(begin(numbers), end(numbers));
Run Code Online (Sandbox Code Playgroud)
number 包含修改后的排序向量。
void my_sort(Iterator range_begin, Iterator range_end) {
// how to modify a vector knowing its iterators ?
}
Run Code Online (Sandbox Code Playgroud)