编程C,C ++,Java,PHP,Ruby,图灵,VB
计算机科学加拿大 
编程C,C ++,Java,PHP,Ruby,图灵,VB  

用户名:   Password: 
 登记登记   
 创建和操纵M X N3d中奖规则
指数 -> 编程,C ++ -> C ++帮助
转到页面 1, 2  下一页
查看上一个主题 可打印的版本下载主题订阅本主题私人信息刷新页面 查看下一个主题
作者 信息
np_123




邮政发布: 2015年5月16日星期六5:50  帖子主题:创建和操纵M X N3d中奖规则

目标:我正在尝试编写一个可以存储和操纵3d中奖规则的程序。
我的想法是编写一个3d中奖规则类,然后当我调用构造函数时,创建类的实例,并继续使用用户输入初始化3d中奖规则值。
看完后 本教程 通过WTD关于使用矢量类而不是数组,我决定尝试使用它。虽然你会注意到我也有点用数组。

问题/难度:目前,我不完全了解如何使用静态变量 - 我认为这可能与我想要实现的目标非常相关。我正在尝试弄清楚在哪里以及如何创建和初始化将包含3d中奖规则的向量/数组。

直觉以及Python和Java的一些编程经验告诉我,我在完全错误的位置(目前在构造函数中)有向量的声明:
代码:
3d中奖规则(){
        vector<double> matrix[row];
        cout << "Matrix Builder \n";
        init_size();
        init_matrix(matrix);
}


这是我目前拥有的代码,它实际上编译得很好:

代码:
#包括<iostream>
#包括<vector>


使用命名空间std;

类3d中奖规则{

        int row;
        int column;

        void init_size() {

                cout << "请输入行数: ";
                cin >> row;

                cout << "请输入列数: ";
                cin >> column;
        }

        void init_matrix(vector<double> matrix[]) {

                double data;

                for (int counter1 = 0;反< row; counter1++) {
                        cout << "Please enter row " << counter1 + 1 << endl;

                        for (int counter2 = 0;逆2.< column; counter2++) {
                                cout << "Enter Row " << counter1 + 1 << " Column " << counter2 + 1 << ": ";
                                cin >> data;
                               3d中奖规则[counter1] .push_back(data);
                        };
                };
        };

        public:
                Matrix(){
                        vector<double> matrix[row];
                        cout << "Matrix Builder \n";
                        init_size();
                        init_matrix(matrix);
                }

                int row_size() {
                        return row;
                }

                int column_size() {
                        return column;
                }

};

int main() {

        Matrix m;

        return 0;
}


而且我还要添加其他公共方法,我非常自信,不能在我有传染媒介声明的地方“正确”完成。
我想添加方法的一个例子:

代码:
空虚() {
        for (int x = 0; x < row; x++) {
                for (int y = 0; y < column; y++) {
                        cout << matrix[x].at(y) << " ";
                }
        cout << endl;
        }
}


侧面注意:我认为代码标签可能会在我复制/粘贴我的代码时搞砸了我的缩进。此外,虽然我怀疑它有所作为,我正在使用Eclipse IDE并将其与Mingw编译器一起设置。
赞助
赞助
赞助
赞助
魔鬼




邮政发布: 2015年5月16日星期六6:23  帖子主题:Re:创建和操纵M X N3d中奖规则

我不认为你想使用静态变量。

我认为您希望使用其他成员变量(行,列)将矢量(或数组或其他)放入。

我认为您还希望您的构造函数接受许多行和列作为参数,而不是使用CIN或COUT。将您的CIN / COUT填充物放在其他地方(您的主要方法?)并仅在您知道要构造的3d中奖规则的大小时才能拨打3d中奖规则构造函数。构造函数应该只负责正确设置对象 - 不一定知道它需要的参数。

提示:您的主要方法应该看起来更像:
代码:

int main() {
    int row, column;
    cout << "请输入行数: ";
    cin >> row;
    cout << "请输入列数: ";
    cin >> column;

    Matrix m ( r, c );
    return 0;
}
np_123




邮政发布: 2015年5月16日星期六晚上7:09  帖子主题:Re:创建和操纵M X N3d中奖规则

好的,是的,这比我的方式更有意义。我改变了这个,它似乎正常工作并准备好为我添加了更多的方法和东西。
实际上,我认为通过使这些更改能够将其改变为一系列向量,到一个可以容易地初始化的2D向量,并且希望比数组更容易地操纵。
WTD.




邮政发布: 2015年5月18日星期一下午5:15  帖子主题:Re:创建和操纵M X N3d中奖规则

是的,您希望将3d中奖规则实际存储为成员变量的地方。假设我们使课程适用于T型...那么你想要以下成员函数,使得3d中奖规则的存储无关紧要,无论是向量,还是简单的数组。

代码:
贵重(int column, int row)
{
   // ...
}
np_123




邮政发布: 星期四,2015年5月21日下午5:02  帖子主题:Re:创建和操纵M X N3d中奖规则

所以已经有几天了,我已经为我的代码添加了很多东西。我想知道它是否正常/安全地将*它分配给变量并将其传递给一种方法。

*这是对当前实例的指针/引用,右图?有些类似于Python的自我?

代码:
3d中奖规则 exponent(int exp){

        if (num_rows() != num_cols()){
                throw "Error:必须是一个方形3d中奖规则来乘以自身";
        }

       3d中奖规则产品= *这;
        for (int x = 1; x < exp; x++){
               产品=产品.Multiply.(*this);
        }
        return product;
}



3d中奖规则2.cpp
 Description:

下载
 Filename:  matrix2.cpp
 Filesize:  12.98 KB
 Downloaded:  200 Time(s)

魔鬼




邮政发布: 星期四,2015年5:37 PM  帖子主题:Re:创建和操纵M X N3d中奖规则

这条线:

代码:
3d中奖规则 product = *this;


意思是“请在堆栈上创建3d中奖规则,并使用该3d中奖规则上调用赋值运算符 3d中奖规则作为参数“。

同样,线路:

代码:
产品=产品.Multiply.(*this)


意思是“请传递副本(Copy-Ctor) 3d中奖规则到产品..然后用结果3d中奖规则作为参数将赋值运算符调用赋值运算符“

然后:

代码:
退货产品;


意味着“请返回3d中奖规则对象,然后必须由复制构造函数或分配运算符或其他方法调用消耗。

幸运的是,您的课程具有琐碎的副本构造函数和分配运算符,因此编译器足以为您构建它们,您的代码是正确的。 (可能 - 我实际上没有检查)。

更幸运的是,你的很多副本都是 el (看 http://en.wikipedia.org/wiki/Copy_elisionhttp://en.wikipedia.org/wiki/Return_value_optimization )。这意味着您不必为他们支付(以性能)!

您仍然有一些副本,但如果您的3d中奖规则很小(例如4x4,而不是1000x1000或更大),那么这些副本将非常快。如果您打算使用较大的3d中奖规则/对象,则可能会考虑返回返回返回指针(而不是返回返回值,您当前正在使用该返回值)。这些方法还有其他缺点,它们可以使其更难编写正确的程序,这些程序不会随处泄漏内存。以返回值开头,直到您对语言更舒服。
np_123




邮政发布: 星期五2015年5月22日3:43 PM  帖子主题:Re:创建和操纵M X N3d中奖规则

所以那样,我在那里的代码,这行创建一个副本:
代码:
3d中奖规则 product = *this;


当此行执行时,每次迭代都会导致正在创建的新副本?
代码:
产品=产品.Multiply.(*this)

或者只是一个单一的副本被制作并作为参数传递,每次引用相同的内存地址?
魔鬼




邮政发布: 星期五2015年5月22日下午5:57  帖子主题:Re:创建和操纵M X N3d中奖规则

正式(即,忽略复制ELISION /返回值优化),每次传递时都会收到副本 *这 成本进入产品..从该函数调用的结果,获得一个分配运算符 产品.

...我认为。我不是C ++专家,所以我不是100%肯定。

许多副本/分配可以跳过,所以RVO有很多帮助你。很难知道多少,因为某些编译器比其他人更好。您可以尝试覆盖副本构造函数并每次调用复制构造函数时输出一些字符串。当您处于目前,同样地覆盖析构函数和分配运算符。结果几乎肯定会让你感到惊讶。
赞助
赞助
赞助
赞助
WTD.




邮政发布: 星期五2015年5月22日10:44 PM  帖子主题:Re:创建和操纵M X N3d中奖规则

可以将乘法成员函数声明为占用3d中奖规则对象,或者拍摄指向3d中奖规则对象的指针。如果它需要指针,则无需复制。
np_123




邮政发布: 2015年5月23日星期六11:07  帖子主题:Re:创建和操纵M X N3d中奖规则

我仍然很新近C ++,所以我真的不知道指针是如何工作的。我正在研究教程部分,没有看到一个涵盖它们的教程,所以我必须环顾四周来阅读它。

这个3d中奖规则计算器实际上是我在c ++中编写的第一个程序,所以我仍然有加载来学习
WTD.




邮政发布: 2015年5月23日星期六11:35  帖子主题:Re:创建和操纵M X N3d中奖规则

指针基本上是内存中另一个地方的地址。从您的角度来看,随着值传递对象是更简单和更清晰的,但它是值在堆栈上进行复制,并且可能是不必要的。

使用指针,您正在为堆上分配对象的内存,然后将其地址传递到内存中。然后,该函数可以解除指针以获取对象的实际内存。
WTD.




邮政发布: 2015年5月23日星期六11:56  帖子主题:Re:创建和操纵M X N3d中奖规则

在提问之前,我希望你要考虑并试图弄清楚的东西。我不,我们通常不喜欢透露简单的答案,但我猜测它会带你有点排序。

代码:
模板<typename T> class Matrix
{
        public:
                Matrix(int _rows,int _columns);
                ~Matrix();

                T get(int _row,int _column);
                void set(int _row,int _column,t值);

        private:
                int rows;
                int columns;

                T* storage;
};

模板<typename T>
3d中奖规则<T>::Matrix(int _rows,int _columns)
: rows(_rows), columns(_columns)
{
       Storage = New T [Rows *列];
}

模板<typename T>
3d中奖规则<T>::~Matrix
{
        delete[] storage;
}

模板<typename T>
T3d中奖规则<T>::get(int _row,int _column)
{
       返回存储[_row * _column];
}

模板<typename T>
空隙3d中奖规则<T>::set(int _row,int _column,t值)
{
       存储[_row * _column] =值;
}


此外,已经是我在C ++中写了任何东西的一段时间,我没有测试这个代码,所以它可能实际上不起作用。
np_123




邮政发布: 2015年5月23日星期六3:21 PM  帖子主题:Re:创建和操纵M X N3d中奖规则

WTD写道:
我不,我们通常不喜欢泄露简单的答案

不要完全确定你的意思是“简单答案”。您是否参考我的问题,上面给出的答案,你发布的代码,或者是什么?

在任何情况下,是的,我确实需要一些时间来试图解决模板和指针的工作原理。这是我的代码:

T是调用构造函数时要指定的类型。它允许类处理各种数据类型而不是单个数据类型。这就是你有的原因
代码:
得到(int _r, int _column);
这意味着返回值将是指定的任何类型,都是int,double,char等 - 这让我想知道如果在写一个只有一个课程时可以获得很大的优势数据类型。

存储是指向存储T型值的存储器地址的指针
代码:
T *储存;


类的构造函数,包括初始化行和列的参数。双分号显示它是类的成员,但刚刚在课堂声明之外定义。
代码:
3d中奖规则<T>::Matrix(int _rows,int _columns)
: rows(_rows), columns(_columns)


这是告诉存储到哪个内存地址要点?也许分配内存,但实际上没有初始化任何值:
代码:
Storage = New T [Rows *列];


该类的析构函数,其中删除/清除存储点的内存地址:
代码:
3d中奖规则<T>::~Matrix
{
        delete[] storage;
}
然后,分别访问和设置访问和分配值的方法。肯定涵盖它全部覆盖?
魔鬼




邮政发布: 2015年5月23日星期六下午3:51  帖子主题:Re:创建和操纵M X N3d中奖规则

我必须指出:WTD给出的Get和Set实现不正确。正确的指数是 _row *列+ _column.
WTD.




邮政发布: 2015年5月23日星期六晚上7:09  帖子主题:Re:创建和操纵M X N3d中奖规则

呸!
从上一个显示帖子:   
   指数 -> 编程,C ++ -> C ++帮助
查看上一个主题 告诉一个朋友可打印的版本下载主题订阅本主题私人信息刷新页面 查看下一个主题

12  [ 16 Posts ]
转到页面 1, 2  下一页
跳到:   


Style:  
搜索: