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()方法,而不是在向量本身上。
擦除是向量类的一种方法。所以你必须在你的
还要注意,在迭代向量的元素时,不应该从向量中删除元素。
你想要达到的可能是:
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); } |