Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在C+中创建用户定义大小的类的对象+;_C++ - Fatal编程技术网

C++ 在C+中创建用户定义大小的类的对象+;

C++ 在C+中创建用户定义大小的类的对象+;,c++,C++,我希望在运行时创建具有用户定义大小的类的对象。 当用户输入5时,它会创建5个对象。 我试过这个 student s[num]; for(int i=0;i<num;i++) { student s[i]; // also used student s[i]=new student(); } student s[num]; 对于(int i=0;iA就是为了这个目的而做的。(基本上是一个动态分配的数组)它有一个构造函数,它取预分配和构造的元素数: #include <vec

我希望在运行时创建具有用户定义大小的类的对象。 当用户输入5时,它会创建5个对象。 我试过这个

student s[num];

for(int i=0;i<num;i++)
{
    student s[i]; // also used student s[i]=new student();
}
student s[num];
对于(int i=0;iA就是为了这个目的而做的。(基本上是一个动态分配的数组)它有一个构造函数,它取预分配和构造的元素数:

#include <vector>
std::vector<student> students(num);
或者,它是迭代器:

for(std::vector<student>::iterator itr = students.begin(); itr != students.end(); ++itr)
{
  //access with *itr..
}
for(std::vector::iterator itr=students.begin();itr!=students.end();++itr)
{
//使用*itr。。
}
A就是为了这个目的而设计的。(基本上是一个动态分配的数组)它有一个构造函数,它接受预分配和构造的元素数:

#include <vector>
std::vector<student> students(num);
或者,它是迭代器:

for(std::vector<student>::iterator itr = students.begin(); itr != students.end(); ++itr)
{
  //access with *itr..
}
for(std::vector::iterator itr=students.begin();itr!=students.end();++itr)
{
//使用*itr。。
}

或者,您可以动态分配和取消分配。如果您新建[],请不要忘记删除[]

#include <iostream>



struct MyObj {
    float a;
    float b;
};


int main() {

    int num = 10;

    MyObj* objs = new MyObj[num];

    for(int i = 0; i < num; i++) {
        objs[i].a = i;   
        objs[i].b = i*2;
    }

    std::cout << objs[3].a << " * 2 = " << objs[3].b << std::endl;

    delete [] objs;

    return 0;
}
#包括
结构MyObj{
浮动a;
浮球b;
};
int main(){
int num=10;
MyObj*objs=新的MyObj[num];
for(int i=0;istd::cout或者,您可以动态分配和取消分配。如果您新建[],请不要忘记删除[]

#include <iostream>



struct MyObj {
    float a;
    float b;
};


int main() {

    int num = 10;

    MyObj* objs = new MyObj[num];

    for(int i = 0; i < num; i++) {
        objs[i].a = i;   
        objs[i].b = i*2;
    }

    std::cout << objs[3].a << " * 2 = " << objs[3].b << std::endl;

    delete [] objs;

    return 0;
}
#包括
结构MyObj{
浮动a;
浮球b;
};
int main(){
int num=10;
MyObj*objs=新的MyObj[num];
for(int i=0;istd::cout
std::vector s(num);
更像
ArrayList
。vector s(num);表示不允许使用不完整的类型。
#include
技巧这是我的答案,include是vector
std::vector s(num);
更像
ArrayList
。vector s(num);表示不允许使用不完整的类型。
\include
技巧在我的回答中,include是向量,可能使用
students.at(i)
而不是
students[i]
,以便进行运行时边界检查。@AaronMcDaid我们正在使用
i
so
[i]必须是有效的。我知道,但是我仍然认为没有人应该在向量上使用<代码> [/COD]。允许它是一个坏习惯。如果我在教C++,我甚至不会提它的存在!@AaronMcDaid究竟如何?边界检查只会增加无意义的开销。我不理解您的反对意见。请在始终使用
[]
和始终使用
.at()之间进行选择
,那么前者肯定会将未定义的行为引入到每一个非琐碎的代码库中。我永远不会相信任何人,即使是最聪明的人,都能避免所有对
[]
的不正确使用。因此,一般来说,开销肯定不是“毫无意义的”。使用
学生。at(I)
而不是
学生[I]
,以便进行运行时边界检查。@AaronMcDaid我们使用的是
i
,所以
[i]
必须有效。我知道,但我仍然认为没有人应该使用
[]对向量来说,这是一个坏习惯。如果我在教C++,我甚至不会提到它的存在。——“-”Aron McDaID如何精确?边界检查只是增加了无意义的开销。我不理解你的反对意见。在使用<代码> []/Cord>之前,总是选择使用<代码>。
,那么前者肯定会将未定义的行为引入到每一个非平凡的代码库中。我永远不会相信任何人,即使是最聪明的人,都能避免所有对
[]
的错误使用。因此,开销绝对不是“无意义的”一般来说,在删除所有对象之后,应该立即删除它们,或者在它们被使用时删除它们,或者在C++中有垃圾回收器,比如C.y.net??没有垃圾收集。如果不删除对象,则会引入内存泄漏。当您完成该对象时,应该删除该对象。在删除之前,请重新分配指针,以避免丢失一块内存。应该在删除所有对象后删除它们,或者在它们停止使用时删除它们;?或者C++中是否有垃圾回收器,如C.y.net??没有垃圾收集。如果不删除对象,则会引入内存泄漏。只要有逻辑意义,就可以在删除一块内存之前重新分配它的指针,以确保不会丢失它。