c ++ vector <char> erase()错误,不会编译

时间:2017-05-05 09:02:20

标签: c++ vector char erase

tableView.backgroundColor = UIColor.black
tableView.frame = CGRect(x: 0, y: 0, width: 180, height: 400)

#include <iostream>
#include <vector>
#include <cstdlib>
#include <time.h>

using namespace std;

void makeVector();
void breakVector();

vector<char> asciiChar;
vector<char> shuffledChar;

int main(){
    srand((unsigned) time(NULL));
    makeVector();
    breakVector();
}

void makeVector(){
    for(char i = 32; i < 127; i++){
        asciiChar.push_back(i);
        cout << i << "  ";
    }
    cout << endl << endl;
}

void breakVector(){
    for(int i = 0; i < asciiChar.size(); i++){
        int j = rand() % asciiChar.size();
        shuffledChar.push_back(asciiChar.at(j));
        asciiChar[j].erase();                   //34 error *******
    }
    for(int i = 0; i < 95; i++){
        cout << shuffledChar.at(i) << "  ";
    }
}

我试图删除向量中用于为其他向量赋值的位置以避免重复值。这段代码应该创建一个向量并将其内容移植到另一个内容中。

我在另一个程序的类似功能中使用了.erase(),它对我有用,但我不理解这个错误信息,而且我的搜索结果也不相关。

1 个答案:

答案 0 :(得分:2)

asciiChar[j].erase();

您正在尝试对char元素使用erase()方法,而不是对矢量本身。

erase是矢量类的一种方法。因此,您必须在asciiChar向量上使用它,而不是在向量的元素上使用它。

另外请注意,在迭代元素时,永远不会从矢量中删除元素。

你想要实现的目标可能就是:

while(asciiChar.size() > 0){
    int j = rand() % asciiChar.size();
    shuffledChar.push_back(asciiChar.at(j));
    asciiChar.erase(asciiChar.begin() + j);
}