相关疑难解决方法(0)

如何在std :: vector中管理动态内存?

std :: vector如何实现对不断变化的元素数量的管理:它是使用realloc()函数还是使用链表?

谢谢.

c++ memory-management stl vector

3
推荐指数
2
解决办法
5578
查看次数

如何正确实现C++中只有抽象基类知道的对象列表的创建(和分配)?

我应该更喜欢堆分配到堆分配.传递值更好(特别是如果你正在创建新对象 - 但同时,如果你通过基类返回,你的对象将被切片),或者至少通过引用而不是传递指针(尽管你不能创建引用向量).

我仔细阅读了所有这些内容,现在我觉得我对之前所了解的知之甚少.关于如何编写一个IMO应该是微不足道的代码,我并没有丝毫想法,同时尊重所有这些精心编写和思考的答案中提到的最佳实践.

这是我想要实现的.(我不假装它是正确的C++,但我只是想传达这个想法).

// This thing is purely virtual!
class BaseStuff { }

// Has important behaviour and data members that shouldn't be sliced
class SomeStuff : public BaseStuff { }

// Don't slice me plz
class OtherStuff : public BaseStuff { }

BaseStuff CreateStuff()
{
    // falls a set of rules to create SomeStuff or OtherStuff instance based on phase of the moon
}

std::vector<BaseStuff> CreateListOfStuff()
{ …
Run Code Online (Sandbox Code Playgroud)

c++

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

stl容器的引用C++ 11

我知道这个问题被问了一百万次.大多数答案只是说对象应该是CopyAssignable和CopyConstructible.但文档清楚地说这是规则(直到C++ 11)!但它仍然无效.为什么?

c++

3
推荐指数
4
解决办法
868
查看次数

在基类向量上调用虚函数

我创建了一些代码来重现问题:

#include "stdafx.h"
#include <iostream>
#include <vector>

class A
{
protected:
    int m_X;
public:
    A() { 
        std::cout << "in A ctor" << std::endl; 
        m_X = 0;
    }
    virtual void printX(){ std::cout << "in A " << m_X << std::endl; }
};

class B : public A
{
public:
    B() {
        std::cout << "in B ctor" << std::endl; 
        m_X = 1;
    }
    virtual void printX(){ std::cout << "in B " << m_X << std::endl; }
};

class As
{
public:
    void …
Run Code Online (Sandbox Code Playgroud)

c++ virtual

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

c++11 如何在向量中使用引用?

我正在使用一些容器。参考向量存在问题,无法正常检测。

error C2039: 'vecMsg' : is not a member of 'std::_Vector_iterator <std::_Vector_val>std::_Simple_types<T2 &>>>'
Run Code Online (Sandbox Code Playgroud)

为什么无法识别成员变量?

vector<T1> vec1;
vector<T2> vec2;

vector<T1>::iterater iVec1;
vector<T2>::iterater iVec2;
vector<T2&>::iterater iInVec;

struct T1
{
public:
   vector<T2&> inVec;
}

struct T2
{
public:
    vector<std::string> vecMsg;
}
Run Code Online (Sandbox Code Playgroud)

在 vec1.inVec 中输入一些数据

for(iVec1 = vec1.begin(); iVec1 != vec1.end(); iVec1++)
{
    for(iVec2 = vec2.begin(); iVec2 != vec2.end(); iVec2++)
    {
            // blaa if

            iVec1->inVec.push_back(*iVec2);

    }
}
Run Code Online (Sandbox Code Playgroud)

访问 vec1.inVec 中的 vecMsg

for(iVec1 = vec1.begin(); iVec1 != vec1.end(); iVec1++)
{
    for(iInVec = iVec1->inVec.begin(); iInVec != …
Run Code Online (Sandbox Code Playgroud)

c++ vector

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

C++ 有比较变量类型的函数吗?

在Python中,为了比较变量的类型,有一个函数“type”,例如:a = 10和b =“abc”,类型(a)!= 类型 (b)。C++中有类似的东西吗?我有一个基类对象向量,我想查看该向量的元素是否已声明为派生类。

c++

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

当左值传递给T &&时,会发生什么?

这是C++ Primer第5版的练习:

练习16.45:给出以下模板,解释如果我们在文字值上调用g,如42,会发生什么.如果我们在类型为int的变量上调用g?P.690

template <typename T>
void g(T&& val)
{
    std::vector<T> v;
}

int main()
{
    //g(42);

    int i;
    g(i);
}
Run Code Online (Sandbox Code Playgroud)

在打电话时42,它编译了.

打开时i,编译器抱怨了很多错误,其中一部分粘贴如下.

forming pointer to reference type 'int&'
Run Code Online (Sandbox Code Playgroud)

我的问题是

  1. 在调用字面值时,42在这种情况下,推断出什么类型T

  2. 什么时候开始i,为什么不编译?如何理解这些错误消息?

c++ templates stl rvalue-reference c++11

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

如何通过引用推送向量?

下面的代码不起作用,因为我将矢量a和b推回到矢量矢量,然后改变矢量a和b.我想改变矢量a和b,以便矢量矢量遭受相同的修改.我该怎么做呢?

#include <iostream>
#include <vector>

int main()
{
std::vector<std::vector<int>>vector;
std::vector<int>a;
std::vector<int>b;
vector.push_back(a);
vector.push_back(b);
for (int i = 1; i <= 10; i++)
    a.push_back(i);
for (int i = 11; i <= 20; i++)
    b.push_back(i);
std::cout << vector[1][0];
std::cin.get();
}
Run Code Online (Sandbox Code Playgroud)

c++ reference vector

0
推荐指数
2
解决办法
146
查看次数

如何修复“对类型的引用需要初始值设定项”?

我正在基于 LeetCode 练习实现 LRU 缓存,但以下代码无法编译

using namespace std;

class LRUCache {
private:
    list<int> data;
    unordered_map<int, list<int>::iterator&> keys_to_data;

    void update_recency(int key, list<int>::iterator& it) {
        data.erase(it);
        data.push_front(key);
        keys_to_data[key]; // issue here
    }
public:
    LRUCache(int capacity) {

    }

    int get(int key) {
        int value = -1;
        auto value_it = keys_to_data.find(key);
        if(value_it != keys_to_data.end()) {
            value = *(value_it->second);
            update_recency(key, value_it->second);
        }
        return value;
    }

    void put(int key, int value) {
    }
};
Run Code Online (Sandbox Code Playgroud)

/Library/Developer/CommandLineTools/usr/include/c++/v1/tuple:1360:7: 错误:对类型 'std::__1::__list_iterator' 的引用需要一个初始化器 Second(_VSTD::forward<_Args2>(_VSTD: :get<_I2>(__second_args))...) ^

...巨大的堆栈跟踪...

/Users/Paul/Desktop/int/main.cpp:17:21:注意:在成员函数 'std::__1::unordered_map &、std::__1::hash、std::__1::equal_to 的实例化中, …

c++ unordered-map c++11

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

指针向量与值向量之间的差异

我听说在C ++中不建议使用指针,但我不明白为什么。

我的问题是我想创建一个类对象向量来管理我的类。

vector<MyClass> vectorOfClass;
Run Code Online (Sandbox Code Playgroud)

自然地,为了获得更好的性能,我应该使用类对象指针的向量吗?

vector<MyClass *> vectorOfClass;
Run Code Online (Sandbox Code Playgroud)

也许可以创建类对象的引用向量?

vector<MyClass &> vectorOfClass;
Run Code Online (Sandbox Code Playgroud)

所以我的问题是:

  • 这些方式有什么区别?
  • 创建类对象向量的最优化方法是什么?

c++ memory pointers class vector

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

矢量&lt;int &amp;&gt; 未编译

问题来自下面的代码:

vector<int &> one;  //compile failed
Run Code Online (Sandbox Code Playgroud)

我很困惑为什么代码无法编译。

c++ reference vector

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