如何创建<wchar_t>具有擦除(size_t pos)方法的功能向量?
how do I create a functioning vector<wchar_t> that has an erase(size_t pos) method?
我正在创建一个c++ wstring
类,用于mingw版本4.3.0,交叉编译Win32。我希望我的字符串像std::string
一样工作,这意味着我想要一个erase(int pos)
方法来擦除位置pos
的单个元素。
这是我的第一次尝试:
#include <wchar.h>
#include <iostream>
#include <vector>
class wstring : public std::vector<wchar_t>{
public:
void erase(size_t where){
erase(begin()+where);
}
};
int main(int argc,char **argv) {
wstring c1;
c1.push_back(L'a');
c1.push_back(L'b');
c1.push_back(L'c');
c1.erase(1);
for(size_t i = 0;i<c1.size();i++){
std::cout << "c1[" << i << "] = " << c1[i] << "n";
}
return 0;
}
这看起来应该对我工作,但是当我试图编译它时,我得到了这个古怪的编译器错误:
$ i386-mingw32-g++ x1.cpp
x1.cpp: In member function 'void wstring::erase(size_t)':
x1.cpp:8: error: no matching function for call to 'wstring::erase(__gnu_cxx::__normal_iterator<wchar_t*, std::vector<wchar_t, std::allocator<wchar_t> > >)'
x1.cpp:7: note: candidates are: void wstring::erase(size_t)
$
真正奇怪的是,如果我拿出erase
方法,只是内联代码,我没有问题:
#include <wchar.h>
#include <iostream>
#include <vector>
class wstring : public std::vector<wchar_t>{
};
int main(int argc,char **argv) {
wstring c1;
c1.push_back(L'a');
c1.push_back(L'b');
c1.push_back(L'c');
c1.erase(c1.begin()+1);
for(size_t i = 0;i<c1.size();i++){
std::cout << "c1[" << i << "] = " << c1[i] << "n";
}
return 0;
}
我迷惑。
您的问题的答案是使用std::vector<T>::erase( iterator )
而不是remove
:
std::vector<int> v;
v.push_back( 1 );
v.push_back( 2 );
v.push_back( 3 );
v.erase( v.begin()+1 ); // equivalent to v.remove( 1 )
但是我认为你找错了对象。在标准库中已经有一个std::wstring
,它是basic_string
与wchar_t
的实例化,并且它将尽可能接近std::string
(这是与char
相同模板的实例化)
您总是可以使用现有的类型std::wstring
,这是std::basic_string<wchar_t>
的类型定义。您也可以根据您喜欢的整型创建其他字符串类。
注意有相应的流对象std::wcout
等
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 通过方法访问结构
- 最小硬币更换问题(自上而下方法)
- C++为构建时间获取QDateTime的可靠方法
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 处理多个异常集合的C++方法
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 有什么方法可以遍历结构吗
- 当类在C++中定义时,有什么方法可以"register"类吗?
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- 使用std::函数映射对象方法
- 有符号的int和int-有没有一种方法可以在C++中区分它们
- C++从另一个类访问公共静态向量的正确方法是什么
- C++优先级队列,按对象的唯一指针的特定方法升序排列
- 没有为自己的结构调用列表推回方法
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 在类定义之后定义一个私有方法
- 枚举环境变量的惯用C++14/C++17方法
- 如何创建<wchar_t>具有擦除(size_t pos)方法的功能向量?