c ++ vector< char>

c++ vector<char> erase() error, won't compile

本问题已经有最佳答案,请猛点这里访问。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#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) <<" ";
    }
}

.

1
2
3
...|31|warning: comparison between signed and unsigned integer expressions [-Wsign-compare]|
C:\Users\Owner\Documents\C++\asciiShuffle\main.cpp|34|error: request for member 'erase' in 'asciiChar.std::vector<_Tp, _Alloc>::operator[]<char, std::allocator<char> >(((std::vector<char>::size_type)j))', which is of non-class type '__gnu_cxx::__alloc_traits<std::allocator<char> >::value_type {aka char}'|
||=== Build failed: 1 error(s), 1 warning(s) (0 minute(s), 0 second(s)) ===|

我正在尝试删除向量中用于将值赋给其他向量的位置,以避免重复值。这段代码应该创建一个向量,并将其内容转换成另一个向量。

我在另一个程序中的类似函数中使用了.erase(),它对我很有用,但我不理解这个错误消息,我的搜索结果与此无关。


1
asciiChar[j].erase();

您试图在char元素上使用erase()方法,而不是在向量本身上。

擦除是向量类的一种方法。所以你必须在你的asciiChar向量上使用它,而不是在向量的元素上。

还要注意,在迭代向量的元素时,不应该从向量中删除元素。

你想要达到的可能是:

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