相关疑难解决方法(0)

std :: vector在增长时会调用swap函数吗?总是或仅适用于某些类型?

据我所知,我可以使用vector(std::vector< std::vector<int> >)的向量,这将是非常有效的,因为内部元素不会被复制,但交换,这要快得多,因为不包括复制内存缓冲区.我对吗?

什么时候std::vector完全利用交换功能?我在C++标准中找不到任何关于它的东西.是否在缓冲区重新分配期间发生?

我做了一些测试才发现它,但我失败了.根本不调用我的自定义数据类型的交换函数.

编辑:这是我的测试程序.

c++ swap vector

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

C++默认构造函数不在运行时使用,但在编译时需要

这是我的代码.如果我删除默认构造函数,下面会出现错误.但是如果我添加一个默认构造函数,它将没有编译和运行的问题.想知道为什么?我特别困惑,因为在运行时根本没有使用默认构造函数,为什么在编译时需要它?

#include <iostream>
#include <vector>
#include <string>

class Foo {
 public:
  //Foo();
  Foo(const std::string& name, double score);
  Foo(const Foo& other);
  Foo(Foo&& other);
  const std::string& name() const { return name_; }
  double score() const { return score_; }

 private:
  std::string name_;
  double score_;
};

/*
Foo::Foo() {
  std::cout << "In default constructor " << std::endl;
  name_ = "foo";
  score_ = 1.0;
}*/

Foo::Foo(const std::string& name, double score) : name_(name), score_(score) {
  std::cout << "In parametered constructor " << std::endl;
}

Foo::Foo(const …
Run Code Online (Sandbox Code Playgroud)

c++

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

std :: vector和Constructors

std :: vector在创建它所包含的对象的新实例时会调用哪个构造函数?我的印象是它调用了默认构造函数但是如果没有定义或者编译器为我做了什么呢?

特别是在这样的情况下:

class Foo
{
    public:
        Foo(int size)
        {
            data = new double[size];
        }


        ~Foo()
        {
            delete[] data;
        }

    private:
        double* data;
};

std::vector<Foo> myVector;
Foo bar(5);
myVector.push_back(bar);
//stuff
Run Code Online (Sandbox Code Playgroud)

当对象具有未知大小直到构建之后,它如何知道要分配多少内存?

c++ constructor vector object

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

标签 统计

c++ ×3

vector ×2

constructor ×1

object ×1

swap ×1