标签: stdvector

"glibc free():在vector.push_back上无效下一个大小(快)"

当我运行我的程序时,它偶尔会崩溃并给我这个错误:" 检测到glibc/pathtoexecutable:free():下一个大小无效(快)"

回溯导致成员函数只调用向量的push_back函数 -

void Path::add(Position p) {path.push_back(p);}
Run Code Online (Sandbox Code Playgroud)

我试过谷歌搜索错误,而绝大多数问题是人们分配的内存太少.但是怎么可能在std :: vector <>.push_back上发生?我可以检查什么?任何帮助表示赞赏.

c++ memory-management glibc stdvector

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

替代std:vector在循环中删除它的元素?

我让我的循环遍历vector的元素.在这个循环中,一些元素正在被删除(我希望它们被删除).虽然std :: vector不允许这样做,但我想要一个替代方案.

for(unsigned int j = 0; j < rectArray.size(); j++)
{
 if( rectArray[j] == 2 ) 
  {
   rectArray.erase(rectArray.begin() + j);
  }
//...
}
Run Code Online (Sandbox Code Playgroud)

你觉得std :: list在这里会好吗?我可以用别的东西吗?

c++ stdvector

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

使用C++优先级队列限制其内存

我使用的priority_queue<unsigned long,vector<unsigned long>,greater<unsigned long> >是C++,内存限制为16MB.我的程序只需要10MB,但一旦达到8653464字节,它会尝试将其容量加倍并抛出一个bad_alloc.

有没有办法使用我当前的实现来阻止这个?可以在priority_queue具有数(n)时间仍然如果我切换到deque[从vector]

c++ stl priority-queue stdvector

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

在恒定时间内交换std :: vector的内容 - 是否可能?

我std::vector用来在Image类中存储图像.我理解他们的工作方式有点麻烦.旋转图像的功能:

void Image :: resize (int width, int height)
{
    //the image in the object is "image"

    std::vector<uint8_t> vec;  //new vector to store rotated image

    // rotate "image" and store in "vec"

    image = vec; // copy "vec" to "image" (right?)

    //vec destructs itself on going out of scope
}
Run Code Online (Sandbox Code Playgroud)

有没有办法阻止最后一个副本?就像在Java中一样,只需切换引用?如果防止任何复制将是很好的.

c++ vector stdvector

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

std :: remove_if使用其他类方法

我想使用std::remove_if谓词,这是一个不同的calss的成员函数.

那是

class B;

class A {
    bool invalidB( const B& b ) const; // use members of class A to verify that B is invalid
    void someMethod() ;
};
Run Code Online (Sandbox Code Playgroud)

现在,实施A::someMethod,我有

void A::someMethod() {
    std::vector< B > vectorB; 
    // filling it with elements

    // I want to remove_if from vectorB based on predicate A::invalidB
    std::remove_if( vectorB.begin(), vectorB.end(), invalidB )
}
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点?

我已经研究了用于remove_if的Idiomatic C++的解决方案 ,但是它处理的是一个稍微不同的情况,其中一元谓词remove_if是成员B而不是成员A.

而且,
我无法访问BOOST或c …

c++ methods predicate stdvector remove-if

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

如何自动维护类实例列表?

在我的C ++项目中,我有一个Engine类和一个Object类。

我的问题在于如何Object创建实例。当前,这是通过使用类中的CreateObject(parameters)函数来完成的Engine。这增加的新实例Object到std::vector的Object实例。

我想维护此类Object在我的Engine类中的实例列表,但不需要此CreateObject(parameters)功能。我这样做的原因是,我可以创建可以继承Object但仍添加到此列表的新类。使用此列表的原因是为了使(Engine可以)我可以遍历Object已创建的每个实例。

最终这将意味着我Object用类似的实例创建实例Object newObject = Object(parameters);,但仍使Engine该类维护所有Object实例的列表,而无需Object引用的实例Engine或将其自身添加到此列表的列表(如Objectshould 的实例)不知道它所在的列表)。 能做到吗?

c++ class list instance stdvector

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

如何将char复制到char*向量中

我正在使用dirent从特定文件夹中读取文件名,我想将名称保存在char*向量中.它似乎是复制一些奇怪的符号而不是复制文件名.这是我到目前为止所尝试的:

std::vector<char*> filenames;

int filenamesAndNumberOfFiles(char *dir)
{
    struct dirent *dp;
    DIR *fd;
    int count = 0;

    if ((fd = opendir(dir)) == NULL) 
    {
        fprintf(stderr, "listdir: can't open %s\n", dir);
        return 0;
    }
    while ((dp = readdir(fd)) != NULL) 
    {
        if (!strcmp(dp->d_name, ".") || !strcmp(dp->d_name, ".."))
            continue;    /* skip self and parent */
        printf("Filename: %s\n", dp->d_name);
        filenames.push_back(dp->d_name);
        count++;
    }
    closedir(fd);
    return count;
}
Run Code Online (Sandbox Code Playgroud)

任何人都可以告诉我为什么它不复制文件名,我怎么能复制它们?

编辑: d_name是一个char变量,声明为:

char d_name[PATH_MAX];
Run Code Online (Sandbox Code Playgroud)

似乎在我的程序中,PATH_MAX等于260.

PS:这是我第一次使用dirent,所以我对它并不熟悉.

c++ dirent.h stdvector

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

将选定字段从结构上的无序集合存储到向量

我有一个unordered_set存储以下结构的

struct match_t{
  size_t score;
  size_t ci;  
};

typedef std::unordered_set<match_t> uniq_t;
Run Code Online (Sandbox Code Playgroud)

现在,我想将的元素存储uniq_t myset;到向量中,但是这样做时,我只想复制分数而不是整个struct。我已经看到了使用assign或分配元素的解决方案back_inserter。我想知道如何从结构中选择所需的字段。我看不到任何参数assign或back_inserter为此目的。

我应该push_back为向量尝试覆盖方法还是执行其他方法?

编辑1 我是否可以通过使用这些方法中的任何一种而不是循环遍历集合并分配所需的值来提高性能?

c++ stl stdvector unordered-set

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

函数模板,用于将shared_ptr的向量填充到基础对象和派生对象

考虑以下:

#include <memory>
#include <utility>
#include <vector>

class Base
{
public:
    Base()
        : x(0)
    {}
    int x;
    virtual ~Base() = default;
};

class Derived : public Base
{
public:
    Derived(double z0)
        : Base{}
        , z{ z0 }
    {}
    double z;
};

template<class T> // T might be either a Base or a Derived class.
std::vector<std::shared_ptr<Base>> MakeVector(std::size_t numElements)
{
    std::vector<std::shared_ptr<Base>> vec;
    for(auto &i : numElements) {     // Compiler error occurs here.
        vec.push_back(std::make_shared<T>());
    }
    return vec;
}

class Foo
{
public:
    Foo(std::size_t …
Run Code Online (Sandbox Code Playgroud)

c++ inheritance templates shared-ptr stdvector

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

向向量的所有元素添加一个整数

我有一个整数向量,可以说{1, 2, 3, 4}。

如何10为每个元素添加常量值以将向量修改为{11, 12, 13, 14}。

如果我想将每个元素都除以an int并修改向量,则与除法相同。我一直找不到解决方案。

c++ algorithm add stdvector c++11

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