鉴于链表的头部,当浏览链表来计算列表的大小时,常用的方法可能是
import matplotlib.pylab as plt
import numpy as np
max_tweets = 19
p = 20
n = 30
datas = [{'label':'tweets', 'color': 'r', 'height': max_tweets},
{'label':'positivity', 'color': 'g', 'height': p},
{'label':'nagitivity', 'color': 'b', 'height': n}]
i = 0
for data in datas:
plt.bar(i, data['height'],align='center',color=data['color'])
i += 1
labels = [data['label'] for data in datas]
pos = [i for i in range(len(datas)) ]
plt.xticks(pos, labels)
plt.xlabel('People Behaviour and Emotions')
plt.title('Sentiment Analysis')
plt.show()
但我也看到人们这样做:
ListNode* curr = head;
int count = 0;
while(curr) {
curr = curr->next;
count++;
}
我记得在解析字符串时,我们经常做
ListNode* curr = head;
int count = 0;
while(curr = curr->next) {
count++;
}
我想知道我是否可以在执行一行代码时调整我的while()(本主题中的e.x.,curr = curr->下一个条件)?如果没有,边缘情况是什么?这是一个很好的做法吗?
由于
答案 0 :(得分:2)
在C ++中,运算符可以像函数一样具有返回值。是否可以将表达式用作条件完全取决于它们返回的内容。为此,您必须查阅文档。
在作业中:a = b
,默认行为是返回b
的值;这样,像a = b = c = 5
这样的连锁分配就可以了。
该表达式等同于a = (b = (c = 5))
。 c = 5
将返回5,表达式变为a = (b = 5)
,b = 5
返回5,因此表达式再次变为a = 5
,从而将{5}分配给a
,b
和c
。
可以直接将流对象评估为bool,因为它是designed to do so通过重写的bool运算符。
如果流对象上有>>
运算符,则会重写该运算符以返回流对象,因此类似于:while (cin >> userInput)
,cin >> userInput
返回cin
},这将产生真或假。
这是好习惯吗?
我还是一名大学生,因此需要采取一些盐。就流而言,我说这是一种很好的做法,因为这是一种众所周知的做事方式。大多数人可以直接告诉你打算做什么,而替代方案并不清楚。
至于作业,我倾向于否,但这取决于谁在阅读你的代码以及你正在做什么。如果您使用它太多,可能很难区分if (userInput = 5)
和if (userInput == 5)
之类的内容,使得很难找到错误。
答案 1 :(得分:1)
基本概念是while循环中的表达式必须可转换为bool
。
curr = curr->next
表达式通过引用返回表达式的左侧(参见chained assignments)。并且表达式的左侧是一个指针,可以转换为布尔值。如果指针等于nullptr
,则转换后的布尔值将为false,否则为true。
表达式content >> outputStr
返回对content
流的引用。这就是为什么你可以链接>>
运算符的原因
cin >> a >> b;
cin >> a
返回对cin
对象的引用,因此表达式的评估就像这样工作
cin >> a;
cin >> b;
cin
对象定义了一个成员函数,允许它可以转换为布尔表达式(http://en.cppreference.com/w/cpp/io/basic_ios/operator_bool),所以你可以这样做
cin >> a;
cout << "cin has failed (true/false) : " << std::boolalpha << static_cast<bool>(cin) << endl;
// static_cast<bool>(cin) is the same as cin.(operator bool())
// if that syntax exists
使用cin
方法将operator bool()
对象转换为布尔表达式。布尔表达式中的某些内容(如if()
语句或while()
)会转换为布尔值。
我想知道我是否可以在执行一行代码时调整我的while()(本主题中的e.x.,curr = curr-&gt;下一个条件)?如果没有,边缘情况是什么?这是一个很好的做法吗?
如果表达式可以转换为bool
,则可以这样做,并且在很多情况下,将表达式嵌入循环中是对&#34;转换为bool&#34;的习惯用法。特征。边缘情况取决于表达式的实现细节。
答案 2 :(得分:0)
你的例子有点扭曲,但至于你的问题:
我是否可以在执行一行代码时调整我的while()(本主题中的e.x.,curr = curr-&gt;下一个条件)?如果没有,边缘情况是什么?
while
中的条件可以是任何可隐式转换为bool
的表达式。在您的示例中,&#34; curr = curr->next
&#34;计算符合此要求的指针。
这是一个好习惯吗?
不会让您感到困惑的代码是一种很好的做法。