c++ vector<char> erase() 错误,无法编译
c++ vector<char> erase() error, won't compile
#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) << " ";
}
}
.
...|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(),它对我有用,但我不明白这个错误消息,我的搜索结果变得不相关。
asciiChar[j].erase();
您正在尝试对 char 元素而不是向量本身使用 erase() 方法。
erase是向量class的一个方法。所以你必须在你的 asciiChar
向量上使用它,而不是在向量的元素上使用它。
另请注意,您应该从不在迭代元素时从向量中删除元素。
你想要达到的大概是这样的:
while(asciiChar.size() > 0){
int j = rand() % asciiChar.size();
shuffledChar.push_back(asciiChar.at(j));
asciiChar.erase(asciiChar.begin() + j);
}
#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) << " ";
}
}
.
...|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(),它对我有用,但我不明白这个错误消息,我的搜索结果变得不相关。
asciiChar[j].erase();
您正在尝试对 char 元素而不是向量本身使用 erase() 方法。
erase是向量class的一个方法。所以你必须在你的 asciiChar
向量上使用它,而不是在向量的元素上使用它。
另请注意,您应该从不在迭代元素时从向量中删除元素。
你想要达到的大概是这样的:
while(asciiChar.size() > 0){
int j = rand() % asciiChar.size();
shuffledChar.push_back(asciiChar.at(j));
asciiChar.erase(asciiChar.begin() + j);
}