相关疑难解决方法(0)

STL中的向量与列表

我在Effective STL中注意到了

vector是默认情况下应该使用的序列类型.

这是什么意思?似乎忽略效率vector可以做任何事情.

任何人都可以给我一个vector不可行的选择但list必须使用的场景吗?

c++ stl list vector

213
推荐指数
12
解决办法
27万
查看次数

迭代时从向量中删除项目?

我有一个向量,包含活动或非活动的项目.我希望此向量的大小对于性能问题保持较小,因此我希望从向量中删除已标记为非活动的项目.我在迭代时尝试这样做,但我收到错误"vector iterators incompatible".

vector<Orb>::iterator i = orbsList.begin();

    while(i != orbsList.end()) {
        bool isActive = (*i).active;

        if(!isActive) {
            orbsList.erase(i++);
        }
        else {
            // do something with *i
            ++i;
        }
    }
Run Code Online (Sandbox Code Playgroud)

c++ iterator stl

52
推荐指数
5
解决办法
6万
查看次数

减少stl向量的容量

有没有办法减少矢量的容量?

我的代码将值插入到向量中(事先不知道它们的数字),当这完成时,向量仅用于读取操作.

我想我可以创建一个新的向量,用大小做一个.reseve()并复制项目,但我真的不喜欢额外的复制操作.

PS:我不关心便携式解决方案,只要它适用于gcc.

c++ stl vector

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

C++ vector :: clear

vector <weight> decoy;

void clear_decoy() {  

    decoy.clear();   

    vector<weight> (decoy).swap(decoy);  
}
Run Code Online (Sandbox Code Playgroud)

在上面的方法中clear_decoy(),请问vector<weight> (decoy).swap(decoy); 是什么意思?

该方法是否清楚decoy?谢谢!

c++ vector

23
推荐指数
4
解决办法
9935
查看次数

收缩矢量

我的地形引擎有问题(使用DirectX).

我正在使用矢量来保存细节块的顶点.当块增加细节时,向量就会增加.

但是,当块减少其细节时,矢量的大小不会缩小.

所以,我的问题是:有没有办法缩小向量的大小?我试过这个:

vertexvector.reserve(16);
Run Code Online (Sandbox Code Playgroud)

c++ stl vector

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

我认为STL导致我的应用程序三倍内存使用

我正在我的应用程序中输入一个200mb的文件,由于一个非常奇怪的原因,我的应用程序的内存使用量超过600mb.我尝试过vector和deque,以及std :: string和char*但没有用.我需要我的应用程序的内存使用与我正在阅读的文件几乎相同,任何建议都将非常有用.是否有导致如此多内存消耗的错误?你能指出问题还是重写整个问题?

Windows Vista SP1 x64,Microsoft Visual Studio 2008 SP1,32位版本,Intel CPU

整个申请到现在为止:

#include <string>
#include <vector>
#include <iostream>
#include <iomanip>
#include <fstream>
#include <sstream>
#include <iterator>
#include <algorithm>
#include <time.h>



static unsigned int getFileSize (const char *filename)
{
    std::ifstream fs;
    fs.open (filename, std::ios::binary);
    fs.seekg(0, std::ios::beg);
    const std::ios::pos_type start_pos = fs.tellg();
    fs.seekg(0, std::ios::end);
    const std::ios::pos_type end_pos = fs.tellg();
    const unsigned int ret_filesize (static_cast<unsigned int>(end_pos - start_pos));
    fs.close();
    return ret_filesize;
}
void str2Vec (std::string &str, std::vector<std::string> &vec)
{
    int newlineLastIndex(0);
    for …
Run Code Online (Sandbox Code Playgroud)

c++ memory memory-leaks stl

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

矢量容量和储备

请考虑以下代码段:

std::vector<int> v;
v.reserve(100);
v.insert(v.end(), 100, 5);

v.erase(v.begin(), v.end());

std::cout << v.capacity << std::endl;
Run Code Online (Sandbox Code Playgroud)

打印出来100.这是否意味着向量仍然保留了100个内存位置?是否需要reserve(0)在调用erase(begin,end)向量后调用,以放弃向量所持有的所有空间?

c++ memory-leaks stl vector

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

如何从std :: vector中恢复内存?

可能重复:
如何缩小std :: vector的大小?
C++ vector :: clear

当我调用vector<double>::clear()一些大尺寸的矢量时,我看不到内存在任务管理器/性能中返回到系统.

显然这是因为容器希望你再次使用相同的内存.一旦任务完成,我将不会再次使用该内存,并且内存将更好地返回到系统.

有没有一种方法,以确保立即内存返回到系统,比其他使用类似指针vector<double> * v/调用deletev,当我们想要的记忆又回到了这个系统?

c++ memory stl vector

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

使用std :: vector添加和删除大量数据

可能重复:
如何缩小std :: vector的大小?

似乎std::vector即使我打电话也不会释放记忆pop_back(),clear()或者resize().

有什么好方法可以解决这个问题吗?例如,在以下代码中:

#include<vector>
??
using namespace std;
??
int main(){
  int i, j;
  vector<int> v[10000];
  for( i=0 ; i<10000 ; i++ ){
    for( j=0 ; j<100000000 ; j++ ){
      v[i].push_back(j);
    }
    while(v[i].size()>0){
      v[i].pop_back();
    }
    v[i].resize(1);
  }
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

向量在完成之前不会释放任何内存.

c++ memory stl vector

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

回收未使用的矢量

我在我的程序中定义了一个向量,如下所示:

vector<bool> isPrime (limit + 1, false);
Run Code Online (Sandbox Code Playgroud)

限制是一个int.稍后在程序中,我想回收矢量,保留名称但减小大小并填充所有元素false.

我试过用了

vector<bool> isPrime (otherLimit + 1, false);
Run Code Online (Sandbox Code Playgroud)

以同样的方式重新定义一个int,char或者string,但是,它返回一个错误,因为我没有用new运算符实例化它,我不能delete用旧的.我已经能够手动调整它并使用for循环将每个元素转换为false ,但这对我来说似乎相当笨拙.

是否有更简单的方法来回收矢量?我的愿望是为了可读性目的,始终保持名称相同.

c++ vector

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

标签 统计

c++ ×10

stl ×8

vector ×8

memory ×3

memory-leaks ×2

iterator ×1

list ×1