相关疑难解决方法(0)

什么是复制和交换习语?

这个成语是什么,什么时候应该使用?它解决了哪些问题?当使用C++ 11时,成语是否会改变?

虽然在许多地方已经提到过,但我们没有任何单一的"它是什么"问题和答案,所以在这里.以下是前面提到的地方的部分列表:

c++ c++-faq copy-constructor assignment-operator copy-and-swap

1907
推荐指数
5
解决办法
34万
查看次数

何时创建类对象的向量时调用构造函数?

假设我有一个名为Foo的课程.Foo没有默认构造函数.它有一个构造函数Foo(int x,float y).

Bar是一个容器类.它包含一个包含Foo实例的向量.

Bar::Bar(int numberOfFoos, int x, float y) {

foovector.resize (numberOfFoos);
for(int i = 0; i < numberOfFoos; i++) {
   **read below**
}
Run Code Online (Sandbox Code Playgroud)

在这一点上,我想调用Foo的构造函数并将参数int x和float y传递给它.Foo的构造函数根据x和y的值做不同的事情.

假设Foo有一个默认构造函数,调整大小矢量函数究竟做了什么?它是否只是在不调用默认构造函数的情况下调整向量的大小?换句话说,是为Foo类型的n个元素保留的空间,但是它们没有被初始化为任何东西?

如果它没有,如果在这种情况下怎么办?

在for循环中我想以这种方式初始化每个Foo元素:

foovector[i].Foo(int x, float y);
Run Code Online (Sandbox Code Playgroud)

但是我不能以这种方式使用点访问运算符来调用构造函数.我现在甚至都不知道构造函数是否已经被resize函数调用过.

问题是,我该怎么办?

关于类向量的另一个相关问题:

在Foo中有一个包含浮点数的向量.float x参数是它应该保持的浮点数.Foo的构造函数有一条线

arrayofFloats.resize (x);
Run Code Online (Sandbox Code Playgroud)

但这意味着计算机事先并不知道Foo的大小.每个foo可以有不同的大小.它不会导致Foo的矢量问题吗?如果每个Foo可以有不同的大小,如何声明特定大小的向量?

抱歉英语不好,我希望它已经足够清楚了.

谢谢.

c++ class vector

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