标志 |= f == s[i],这个语句会做什么?
flag |= f == s[i], what will this statement do?
flag |= f == s[i]
,这个语句将做什么,其中flag==0
,f
是一个string
,s
是字符串数组。
int main()
{
int n;
cin >> n;
vector<string> s(n);
vector<int> t(n);
for (int i = 0; i < n; i++)
{
cin >> s[i] >> t[i];
}
string f;
cin >> f;
int ans = 0;
int flag = 0;
for (int i = 0; i < n; i++)
{
ans += flag * t[i];
flag |= f == s[i];
}
cout << ans << 'n';
return 0;
}
flag |= f == s[i]
可以写flag = flag | f == s[i]
是flag
值和f == s[i]
的结果(0 或 1(之间的按位 OR。
如果随时f == s[i]
,这会将flag
设置为 1
flag | f == s[i] | result
-----+-----------+-------
0 | 0 | 0
0 | 1 | 1
1 | 0 | 1
1 | 1 | 1
在这种情况下,这是
if (f == s[i])
{
flag = 1;
}
首先,复合赋值(如|=
(等于
flag = flag | f == s[i]
然后使用==
进行比较会得到一个bool
值(true
或false
(。
类型bool
可以隐式转换为int
,false
0
,true
1
。
所以这要么是
flag = flag | 0; // f == s[i] is false
或
flag = flag | 1; // f == s[i] is true
最后是|
运算符,它是按位 or。按位或带1
将设置最低位。如果flag
0
那么它要么保持0
(如果f == s[i]
为假(,要么变为1
(如果f == s[i]
为真(。设置为1
的值flag
将不会再次更改所示代码中的值。
标志在开头为 0 "中和">
ans += flag * t[i]; //ans += 0* t[i] <==> ans = ans + 0 <==> {;}
一旦标志在flag |= f == s[i];
时变为真(当f == s[i]
时(,它就保持为真(因为true|false==true
和true|true==true
,并且操作变为
ans += 1 * t[i]; // <==> ans += t[i];
与其ans += flag * t[i];
,不如if (flag) ans += t[i];
。
或者,您可以使用函数(或 goto(代替标志:
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int sum_since(std::vector<int> const &X, size_t N)
{
size_t top = X.size();
int r=0; for(size_t i=N; i<top; i++) r+=X[i];
return r;
}
int main() {
int n;
cin >> n;
vector<string> s(n);
vector<int> t(n);
for (int i = 0; i < n; i++) {
cin >> s[i] >> t[i];
}
string f;
cin >> f;
int ans = 0;
int flag = 0;
for (int i = 0; i < n; i++)
if( f==s[i] ) { ans=sum_since(t,i); break; }
cout << ans << 'n';
return 0;
}
相关文章:
- 线程,如果else语句,都是错误的上下文切换后,会发生什么
- "类模板示例<int>;"语句对 C++11 是什么意思?
- 主线的等价语句是什么
- 标志 |= f == s[i],这个语句会做什么?
- C++ 参考:这两个语句有什么区别?
- 这两个C++语句连接字符串有什么区别?
- 什么可以用来替换代码中的循环和 if 语句?
- 对于单个数据 WORD 的 memcpy 和赋值语句有什么区别?
- 是什么使这个以'+'开头的字符串添加成为有效的语句?
- 在 if 语句中处理多个 or 的更优雅的方法是什么
- scanf() 语句中"%*[^n]"的格式字符串指示什么?分配抑制器 (*) 和否定扫描集 ([^) 如何协同工作?
- "1L << count"是什么意思?如何使用超出"unsigned long long int? "范围的语句编号打印?
- 学习时空复杂性时语句XYZ的含义是什么?
- if 语句正在检查什么条件
- 在 cout 语句中首先运行什么?(C++17)
- 这两个类语句之间有什么区别?
- 当您希望在Arduino Uno编程中同时执行不同函数时,使用什么代码/语句
- 编译器遇到返回语句时会做什么
- 当执行此代码中的第二个语句时,内部会发生什么
- C++:无论如何,有什么可以知道是什么触发了 If 语句