class myClass
{
public:
void operator++()
{
// ++myInstance.
}
void operator++(int)
{
// myInstance++.
}
}
Run Code Online (Sandbox Code Playgroud)
让编译器区分myInstance++和++myInstance,实际上是什么可选int参数operator++?如果是这样,它是什么?
确切重复:在C++中i ++和++ i之间是否存在性能差异?
确切重复:循环中i ++和++ i之间的区别?
什么更有效,i ++或++ i?
我只在Java和C/C++中使用过这个,但我真的要求实现它的所有语言.
在大学里我有一位教授告诉我们++我更有效率,但已经有几年了,我想从Stack Overflow社区获得意见.
我正试图通过玩家手牌迭代.
Player.cpp
vector<Card*>::iterator iter;
for(iter = current_cards.begin(); iter != current_cards.end(); iter++) {
cout << iter->display_card() << endl;
}
Run Code Online (Sandbox Code Playgroud)
它在
cout << iter->display_card() << endl;
Run Code Online (Sandbox Code Playgroud)
目前提出"错误:表达式必须具有指针类型".
同样,current_cards声明为:
vector<Card*>current_cards;
Run Code Online (Sandbox Code Playgroud)
此外,display_card()方法很简单:
Card.cpp
string Card::display_card(){
stringstream s_card_details;
s_card_details << "Colour: " << card_colour << "\n";
s_card_details << "Type: " << card_type << "\n";
return s_card_details.str();
}
Run Code Online (Sandbox Code Playgroud)
我已经查看了各种资源,并且针对类似问题提出的所有建议都没有对我有用.谢谢你的帮助!
好吧,在我提出问题之前我想说清楚一件事.我目前是NIU计算机科学专业的学生,这与我在那里的课程作业有关.因此,如果有人有问题,请不要再阅读,继续关注您的业务.
现在对于任何愿意帮助这一情况的人来说.对于我目前的作业,我们必须阅读一个只是一个文本块的文件.对于文件中的每个单词,我们要清除单词中的任何标点符号(例如:"不能"将最终为"can","that - to"将最终显示为"that",显然没有引号,引号仅用于指定示例的内容).
我遇到的问题是我可以清理字符串,然后将其插入我们正在使用的地图中但由于某些原因,我编写的代码允许将空字符串插入到地图中.现在我已经尝试了所有可以阻止这种情况发生的事情,我唯一想到的就是在地图结构中使用擦除方法.
所以我正在寻找的是两件事,任何关于我如何能够解决这个问题的建议只是简单地删除它而b)我可以对我已编写的代码进行任何改进.
以下是我从文件中读取的函数,然后是清理它的函数.
注意:从文件读入的函数调用clean_entry函数以在将任何内容插入到映射之前去掉标点符号.
编辑:谢谢克里斯.数字是允许的:).如果有人对我写的代码有任何改进,或者对我所做的事情有任何批评,我会听.在学校,我们真的不能以正确,适当或最有效的方式反馈.
int get_words(map<string, int>& mapz)
{
int cnt = 0; //set out counter to zero
map<string, int>::const_iterator mapzIter;
ifstream input; //declare instream
input.open( "prog2.d" ); //open instream
assert( input ); //assure it is open
string s; //temp strings to read into
string not_s;
input >> s;
while(!input.eof()) //read in until EOF
{
not_s = "";
clean_entry(s, not_s);
if((int)not_s.length() == 0)
{
input >> s;
clean_entry(s, not_s);
}
mapz[not_s]++; //increment occurence
input >>s; …Run Code Online (Sandbox Code Playgroud) 我知道这个问题已经讨论了好几次了,但我找不到一个解释为什么在后增量操作时需要复制的帖子.
引用stackoverflow回复:
int j = i++; // j will contain i, i will be incremented.
int j = ++i; // i will be incremented, and j will contain i+1.
Run Code Online (Sandbox Code Playgroud)
当考虑后/前增量的定义时,这是完全有意义的.很多时候,在比较前/后增量的性能时,可以说后增量需要复制,增加它并返回副本,而预增量只增加值而不创建副本.
虽然已经在数十篇帖子中对性能进行了比较,但我真的找不到为什么在后增量的情况下必须制作副本的任何解释.为什么不返回旧值,然后将变量的值增加1(或者操作符重载方式),而不是创建新对象并返回该对象.
可能重复:
为什么在语句中的其他地方没有使用值的情况下使用++ i而不是i ++?
C++中的增量 - 何时使用x ++或++ x?
i++ vs. ++i
Run Code Online (Sandbox Code Playgroud)
什么时候在真实场景中使用?
可能重复:
在C++中预增量比后增量更快 - 是吗?如果是的话,为什么呢?
在C++中i ++和++ i之间是否存在性能差异?
我被告知,当使用STL和它的迭代器时,我应该总是使用++iter而不是iter++.
我引用:
因为它只能更快,从不慢
这是真的?
在下列用法方面,请用C中的执行时间进行评分.在一些访谈中,我被问到我应该在这些变化中使用哪些以及为什么.
a++
++a
a=a+1
a+=1
Run Code Online (Sandbox Code Playgroud) 我有一个10000个随机数(mod 100)的向量,我想计算两个数字中有多少对加起来等于100。我编写了以下内容:
auto noPairsSumTo100 = 0;
const auto itEnd = end(myNums);
for (auto it1 = begin(myNums); it1 != itEnd ; ++it1) {
for (auto it2 = it1; it2 != itEnd ; ++it2) {
if (*it1 + *it2 == 100) {
noPairsSumTo100 ++;
}
}
}
Run Code Online (Sandbox Code Playgroud)
在我的机器上,以调试模式运行大约需要21.6秒。如果我将_ITERATOR_DEBUG_LEVEL = 0设置(将_SECURE_SCL和_HAS_ITERATOR_DEBUGGING都设置为0),则执行时间将减少到9.5秒。更换!=比较用<进一步减少了的时间到〜8.5秒。
如果我通过对向量进行索引来实现相同的算法,如下所示:
auto noPairsSumTo100 = 0;
const auto itEnd = end(myNums);
for (auto index1 = 0; index1 < noTerms; ++index1) {
for (auto index2 = index1; index2 < noTerms; …Run Code Online (Sandbox Code Playgroud) c++ ×9
c ×2
arguments ×1
assembly ×1
class ×1
increment ×1
iterator ×1
java ×1
object ×1
optimization ×1
performance ×1
pointers ×1
stl ×1
vector ×1
visual-c++ ×1