小编cpp*_*cpp的帖子

如何退出嵌套循环

我有类似的东西

   while(playAgain==true)
   {
      cout<<"new game"<<endl; //i know 'using namespace std;' is looked down upon
      while(playerCard!=21)
      {
          *statements*
          if(decision=='n')
          {
              break
          }
       ...
      }
   }
Run Code Online (Sandbox Code Playgroud)

但是当我想要打破两个循环时,那个中断只会突破第一个while循环

c++ loops break while-loop

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

指针向量中的for_each指针

我想在for_each()函数中初始化一个指针向量:

#include <stdlib.h>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;

class Cow{
        public:
                Cow(){ _age = rand()% 20; }
                int get_age() { return _age;}
        private:
                int _age;
};

void add_new(Cow* cowp)
{
        cowp = new Cow;
}

int main()
{
        srand(time(NULL));
        const int herd_size=10;
        vector<Cow*> herd(herd_size);
        for_each(herd.begin(), herd.end(),add_new);
        cout << "Age: " << herd[0]->get_age() << endl; // line 27
}
Run Code Online (Sandbox Code Playgroud)

但是,我在第27行得到了运行时"分段错误"错误.牧群向量似乎未被启用.为什么?

c++ pointers stl

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

使用binder1st和自定义函子

我想将我的print functor的第一个参数绑定到0:

#include<iostream>
#include<functional>
using namespace std;

class Print : public std::binary_function<int,int,void>{
public:
    void operator()(int val1, int val2)
    {   
        cout << val1 + val2 << endl;
    }   
};

int main()
{
    Print print;
    binder1st(print,0) f; //this is line 16
    f(3);  //should print 3
}
Run Code Online (Sandbox Code Playgroud)

上面的程序(基于C++ Primer Plus的示例)无法编译:

line16 : error : missing template arguments before ‘(’ token
Run Code Online (Sandbox Code Playgroud)

怎么了?

我不想使用C++ 11也不想提升功能.

编辑:为简单起见,operator()返回类型已从bool更改为void

c++ functor

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

朋友迭代器可以访问非静态数据成员吗?

我有一个A类和一个简单的(非常有限的)迭代器A_iterator指向这个类并成为它的朋友:

#include<vector>
#include<iostream>
using namespace std;

class A_iterator{
public:
    A_iterator(int index) : _index(index) {}
    int operator*();
private:
    int _index;
};

class A{
    friend class A_iterator;
public: 
    typedef A_iterator iterator;
    A() {   _elems.push_back(1); _elems.push_back(2);   }   
private:
    static vector<int> _elems;  //line  19
};

vector<int> A::_elems; // line 22

int A_iterator::operator*()
{
    return A::_elems[_index];  //line   26  
}

int main()
{
    A a;
    A::iterator it(0);
    cout << *it << endl; //line 33
}
Run Code Online (Sandbox Code Playgroud)

这很好用.但是,我不希望_elems是静态的.如果我将从第19行删除静态关键字并删除第22行,那么我应该如何修改第26行?第33行无法更改.

c++ iterator friend

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

从文件中读取文本的问题

我有这个函数从文件中读取文本并将其添加到字符串中,现在奇怪的是,如果它是一个短文本,它可以正常工作.但如果它的文本较长,则字符串变为空,那么解决此问题的任何帮助都会受到赞赏.

 string inlasning(string namn)
{
    string filString, temp;

    ifstream filen(namn.c_str());

    if(!filen.good())
    {
        cout << "Otillganglig fil" << endl;
        filString = "ERROR";
        return filString;
    }
    else
    {
        while(!filen.eof())
            getline(filen, temp);
            filString.append(temp);
    }

    filen.close();
    return filString;

}
Run Code Online (Sandbox Code Playgroud)

c++ getline

0
推荐指数
1
解决办法
634
查看次数

标签 统计

c++ ×5

break ×1

friend ×1

functor ×1

getline ×1

iterator ×1

loops ×1

pointers ×1

stl ×1

while-loop ×1