相关疑难解决方法(0)

运算符++中的Int Argument

class myClass
{
    public:

    void operator++()
    {
        // ++myInstance.
    }

    void operator++(int)
    {
        // myInstance++.
    }
}
Run Code Online (Sandbox Code Playgroud)

让编译器区分myInstance++和++myInstance,实际上是什么可选int参数operator++?如果是这样,它是什么?

c++ arguments class operator-overloading

16
推荐指数
2
解决办法
7496
查看次数

什么更有效,i ++或++ i?

确切重复:在C++中i ++和++ i之间是否存在性能差异?
确切重复:循环中i ++和++ i之间的区别?


什么更有效,i ++或++ i?

我只在Java和C/C++中使用过这个,但我真的要求实现它的所有语言.

在大学里我有一位教授告诉我们++我更有效率,但已经有几年了,我想从Stack Overflow社区获得意见.

c++ java performance pre-increment post-increment

15
推荐指数
4
解决办法
2万
查看次数

通过指针向量迭代

我正试图通过玩家手牌迭代.

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)

我已经查看了各种资源,并且针对类似问题提出的所有建议都没有对我有用.谢谢你的帮助!

c++ pointers vector object

15
推荐指数
2
解决办法
3万
查看次数

了解有关i ++和i = i + 1的更多信息

我想知道两种增量形式之间是否存在差异.一些链接说i ++比i = i + 1更快;

另外作为人之一,我的观察对于汇编代码也是一样的.请检查图像,其中汇编代码对于i ++和i = i + 1都是相同的 - 在此输入图像描述

还有另一个链接说,之前的增量运算符比加法和赋值更快,但现在编译器优化i ++和i = i + 1相同.

是否有任何官方文件/文件我们可以参考确认什么是正确的?(我通常会使用信用卡和一个人在stackoverflow上接受的答案数量.在我提供的链接上找不到任何此类信息).

c c++ optimization assembly post-increment

10
推荐指数
2
解决办法
1619
查看次数

用C++清理一串标点符号

好吧,在我提出问题之前我想说清楚一件事.我目前是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)

c++

8
推荐指数
1
解决办法
3410
查看次数

为什么后增量需要复制而预增量不需要

我知道这个问题已经讨论了好几次了,但我找不到一个解释为什么在后增量操作时需要复制的帖子.

引用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(或者操作符重载方式),而不是创建新对象并返回该对象.

c++ increment pre-increment post-increment

7
推荐指数
2
解决办法
1372
查看次数


STL迭代器:前缀增量更快?

可能重复:
在C++中预增量比后增量更快 - 是吗?如果是的话,为什么呢?
在C++中i ++和++ i之间是否存在性能差异?

我被告知,当使用STL和它的迭代器时,我应该总是使用++iter而不是iter++.

我引用:

因为它只能更快,从不慢

这是真的?

c++ stl

6
推荐指数
2
解决办法
5213
查看次数

在C.Assume gcc中作为编译器执行效率方面的速率++ a,a ++,a = a + 1和a + = 1

可能重复:
在C++中i ++和++ i之间是否存在性能差异?

在下列用法方面,请用C中的执行时间进行评分.在一些访谈中,我被问到我应该在这些变化中使用哪些以及为什么.

a++
++a
a=a+1
a+=1
Run Code Online (Sandbox Code Playgroud)

c c++

5
推荐指数
2
解决办法
1万
查看次数

哪些因素导致迭代器在调试模式下如此缓慢(VC ++ 2012)

我有一个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++ iterator visual-c++ visual-studio-2012

5
推荐指数
1
解决办法
962
查看次数