相关疑难解决方法(0)

cplusplus.com有什么问题?

对于这个问题,这可能不是一个非常合适的论坛,但是让我试一试,冒着被搬走的风险.

C++标准库有几个参考,包括非常有价值的ISO标准,MSDN,IBM,cppreferencecplusplus.就个人而言,在编写C++时,我需要一个具有快速随机访问,短加载时间和使用示例的引用,并且我一直在发现cplusplus.com非常有用.但是,我一直在SO上听到关于该网站的负面看法,所以我想具体说明:

cplusplus.com提供的错误,误解或错误建议有哪些?使用它来做出编码决策有哪些风险?

让我补充一点:我希望能够通过标准的准确报价在这里回答问题,因此我想发布可立即使用的链接,而cplusplus.com将是我选择的网站,如果不是这个问题.

c++

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

从向量中删除项目,而在C++ 11范围内'for'循环?

我有一个IInventory*的向量,我正在使用C++ 11范围循环遍历列表,以便对每个进行处理.

在做了一些东西之后,我可能想要从列表中删除它并删除对象.我知道我可以随时调用delete指针来清理它,但是在范围for循环中,从矢量中删除它的正确方法是什么?如果我从列表中删除它将使我的循环失效?

std::vector<IInventory*> inv;
inv.push_back(new Foo());
inv.push_back(new Bar());

for (IInventory* index : inv)
{
    // Do some stuff
    // OK, I decided I need to remove this object from 'inv'...
}
Run Code Online (Sandbox Code Playgroud)

c++ for-loop vector c++11

91
推荐指数
4
解决办法
6万
查看次数

从C++ std :: vector中删除第i项

如何从中删除第i项std::vector

我知道我想删除第i个元素.我int i; and std::vector<process> pList;在那里process是一个结构.我想做一些与以下相同的事情:

pList.remove(i);
Run Code Online (Sandbox Code Playgroud)

c++ vector

32
推荐指数
4
解决办法
6万
查看次数

使用索引擦除stl :: vector中的元素

我有一个stl::vector<int>,我需要删除给定索引处的所有元素(向量通常具有高维度).我想知道,考虑到原始矢量的顺序应该保留,这是进行这种操作的最有效方法.

虽然,我在这个问题上发现了相关的帖子,但有些人需要删除一个单元素多个元素,其中删除 - 删除成语似乎是一个很好的解决方案.但是,在我的情况下,我需要删除多个元素,因为我使用的是索引而不是直接值,remove-erase idiom所以无法应用,对吧?我的代码如下所示,我想知道在效率方面是否可以做得更好?

bool find_element(const vector<int> & vMyVect, int nElem){
    return (std::find(vMyVect.begin(), vMyVect.end(), nElem)!=vMyVect.end()) ? true : false;
}

void remove_elements(){

    srand ( time(NULL) );

    int nSize = 20;
    std::vector<int> vMyValues;
    for(int i = 0; i < nSize; ++i){
            vMyValues.push_back(i);
    }

    int nRandIdx;
    std::vector<int> vMyIndexes;
    for(int i = 0; i < 6; ++i){
        nRandIdx = rand() % nSize;
        vMyIndexes.push_back(nRandIdx);
    }

    std::vector<int> vMyResult;
    for(int i=0; i < (int)vMyValues.size(); i++){ …
Run Code Online (Sandbox Code Playgroud)

c++ algorithm stl vector

18
推荐指数
3
解决办法
7132
查看次数

推进std :: vector std :: advance VS运算符+的迭代器?

我发现自己写了很多东西:

int location =2;
vector<int> vec;
vector<int>::iterator it=vec.begin();

/..../
std::advance(it, location);
Run Code Online (Sandbox Code Playgroud)

代替

 it= it + 5;
Run Code Online (Sandbox Code Playgroud)

什么是首选/推荐方式?

c++ stl

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

如何使用擦除函数通过索引从std :: vector <>中擦除多个元素?

我有一个a存储值[0 1 2 3 5]和其他向量的向量removelist存储要删除的索引[0 1 2],以便[3 5]最后离开.当我实现以下代码时,它会意外删除项目,因为向量a将在此过程中更改顺序.我有什么方法可以实现我的目标吗?

 for (int i = 0; i<removelist.size() ; i++)     
    a.erase(a.begin() + removelist[i]);
Run Code Online (Sandbox Code Playgroud)

c++ vector

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

erase()对结构/对象内的STL向量不起作用?

我有一个包含STL向量的对象.我从矢量大小为零开始,并使用push_back它来添加它.所以,push_back工作正常.

在我的代码中,向量中的每个元素代表一个原子.因此,该STL载体在其内部的对象是"分子".

当我试图从我的分子中移除一个原子,即从阵列中擦除其中一个元素时,该erase()功能不起作用.其他方法可以工作,如size()clear().clear()删除所有元素,这是过度的.erase()正是我想要的,但由于某种原因它不起作用.

这是我的代码的一个非常简化的版本.但是,它确实代表了问题.


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

using namespace std;

class atomInfo 
{
/* real code has more variables and methods */
public:
    atomInfo () {} ;
};

class molInfo 
{
/* There is more than 1 atom per molecule */
/* real code has more variables and methods */
public:
    vector <atomInfo> atom;
    molInfo () {};
};

int main () …
Run Code Online (Sandbox Code Playgroud)

c++ stl

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

如何在C++中删除小于X的数组中的整数?

我发现了PHP的相同问题,我试图在C++中做同样的事情.

我试过以下:

// returns new array with numbers lower then "number", len is set to
// new length.
int * filter(int array[], int &len, int number) {
    int cnt = 0;
    for (int i = 0; i < len; i++) {
        if (array[i] < number) {
            cnt++;
        }
    }
    int *ret = new int[cnt];
    cnt = 0;
    for (int i = 0; i < len; i++) {
        if (array[i] < number) {
            ret[cnt] = array[i];
            cnt++;
        }
    }
    len = …
Run Code Online (Sandbox Code Playgroud)

c++ arrays sorting filtering

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

矢量擦除错误

我在C++中有以下代码:

#include <iostream>
#include <cstdlib>
#include <ctime>
#include <vector>
int main ()
{
    srand(time(0));
    int noOfElements = 9;
    for (int a = 0; a < 9; a++)
    {
        std::vector<int> poss;
        for (int a = 1; a <= 9; a++)
            poss.push_back(a);
        for (int b = 0; b < 9; b++)
        {
            int random = rand() % 9;
            std::cout << poss[random];
            poss.erase(random);
            noOfElements--;
        }
        std::cout << "\n";
    }
}
Run Code Online (Sandbox Code Playgroud)

然而,当我运行它时,它会返回:

error: no matching function for call to 'std::vector<int>::erase(int&)'
Run Code Online (Sandbox Code Playgroud)

对于第13行.

为什么这样,我该如何纠正呢?

c++ vector

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

std :: vector> v.erase(&v [1]); 未找到

要从矢量中删除元素,我们可以使用

v.erase(v.begin() + 1); // remove 2nd 
Run Code Online (Sandbox Code Playgroud)

此外,我在本网站(SO)的一些帖子中找到了如下句子(例如这个).

v.erase(&v[1]); 
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试使用第二句时,编译器说"错误:没有用于调用std :: vector的匹配函数"...

http://ideone.com/UZJaEK

第二句只能在某些有限的环境中使用吗?

c++ vector

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

标签 统计

c++ ×10

vector ×6

stl ×3

algorithm ×1

arrays ×1

c++11 ×1

filtering ×1

for-loop ×1

sorting ×1