相关疑难解决方法(0)

STL中的向量与列表

我在Effective STL中注意到了

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

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

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

c++ stl list vector

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

消除std :: vector中的重复项

我有一个非常大的std :: vector std :: vectors,它包含固定数量的无符号整数.

所有uint向量都按升序排序.

我目前消除重复向量的方法是

unsigned int i = 0;
while ( i < new_combs.size() )
{
  unsigned int j = i + 1;
  while ( j < new_combs.size() )
  {
     unsigned int k = 0;
     while ( k < new_combs.at(i).size() && new_combs.at(i).at(k) == new_combs.at(j).at(k) )
        ++k;
     if ( k == new_combs.at(j).size() )
        new_combs.erase(new_combs.begin() + j);
     else
        ++j;
  }
  ++i;
}
Run Code Online (Sandbox Code Playgroud)

这里,new_combs是包含如上所述的向量的向量.

如果向量矢量未排序,是否有更有效的方法来消除重复?

c++ algorithm stdvector

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

为什么这个C++函数需要4倍于交流功能

我正在考虑将c ++用于性能关键应用程序.我认为C和C++都有相似的运行时间.但是我发现c ++函数需要运行4倍于可比较的C片段.

当我进行反汇编时,我看到end(),++,!=都是作为函数调用实现的.是否有可能使它们(至少其中一些)内联?

这是C++代码:

typedef struct pfx_s {
    unsigned int start;
    unsigned int end;
    unsigned int count;
} pfx_t;

typedef std::list<pfx_t *> pfx_list_t;

int
eval_one_pkt (pfx_list_t *cfg, unsigned int ip_addr)
{
    const_list_iter_t iter;

    for (iter = cfg->begin(); iter != cfg->end(); iter++) {
        if (((*iter)->start <= ip_addr) &&
            ((*iter)->end >= ip_addr)) {
            (*iter)->count++;
            return 1;
        }
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这是等效的C代码:

int
eval_one_pkt (cfg_t *cfg, unsigned int ip_addr)
{
    pfx_t *pfx;

    TAILQ_FOREACH (pfx, &cfg->pfx_head, next) {
        if ((pfx->start <= ip_addr) …
Run Code Online (Sandbox Code Playgroud)

c c++

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

标签 统计

c++ ×3

algorithm ×1

c ×1

list ×1

stdvector ×1

stl ×1

vector ×1