基于循环的C 范围内的Ampers和
Ampersand in c++ range based for loops
这是代码:
#include <cmath>
#include <iostream>
#include <iomanip>
#include <vector>
#include <cstdio>
int main(int argc, char *argv[]) {
const unsigned int max_chars = 100;
char buffer[max_chars];
std::cin.getline(buffer, max_chars, 'n');
unsigned int count = 0;
for (auto c : buffer) {
if (c == ' ') {
break;
}
count++;
}
std::cout << "Input: ===========" << std::endl;
std::cout << buffer << std::endl;
std::cout << "Number of chars ==" << std::endl;
std::cout << std::dec << count << std::endl;
std::cout << "==================" << std::endl;
}
这是根据C 教科书中的某些示例代码进行了改编的,该教科书故意处理C风格的字符串,所以请忍受我。
所以我尝试了两个版本,一个带有for (auto c : buffer)
,另一个带有for (auto &c : buffer)
。两者似乎都起作用。问题是,那是什么区别?
使用链接时,您可以直接与容器的元素一起使用。否则 - 带有副本。尝试此示例:
#include <iostream>
#include <vector>
using namespace std;
int main()
{
int n = 10;
vector<int> a(n);
vector<int> b(n);
for (auto &key : a) key = rand()%10;
for (auto key : b) key = rand()%10;
for (int i = 0; i < n; i++) cout << a[i];
cout << endl;
for (int i = 0; i < n; i++) cout << b[i];
}
第一个(no&amp;)是一个值,第二个(with&amp;)是参考。顾名思义,引用"引用"值,类似于指针"点"值的方式。
尝试在您的if语句之后添加c = 'x';
,并尝试在此处查看差异。
相关文章:
- 为什么在全局范围内使用"extern int a"似乎不行?
- 错误:未在此范围内声明'reverse'
- 并行用于C++17中数组索引范围内的循环
- 求出有多少个数字是完美平方,而sqrt()是L,R范围内的素数
- 不计算一个范围内的完美数
- 错误:"imread"未在此范围内声明
- 我在范围内未声明的错误类有问题
- 如何在cpp中使用地图显示给定日期范围内(在下面的问题中)的费率?
- 我有一个数组,我想输入一个范围,然后找到范围内所有偶数的总和?
- 未在此范围内声明错误 'xy'
- 在C++中使用变量而不是"#define"来指定数组大小是不是一种糟糕的做法?(C错误:在文件范围内
- 命名空间范围内的外部 - GCC vs clang vs msvc
- 如何改进一堆在已知值范围内评估变量的 else-if 条件?
- 如何仅使用 While 循环在给定范围内找到可被 7 整除的计数整数
- Socklen_t未在此范围内声明
- 错误:'[' 之前预期的非限定 id 和错误:'users'未在此范围内声明
- 查找给定范围内最长连续 1 的频率
- "Main"已在当前范围内声明
- c++ 变量在宏的扩展中没有在这个范围内声明
- 基于循环的C 范围内的Ampers和