所有,
这个问题的延续这一个.我认为STL错过了这个功能,但它只是我的恕我直言.
现在,问题.
考虑以下代码:
class Foo
{
public:
Foo();
int paramA, paramB;
std::string name;
};
struct Sorter
{
bool operator()(const Foo &foo1, const Foo &foo2) const
{
switch( paramSorter )
{
case 1:
return foo1.paramA < foo2.paramA;
case 2:
return foo1.paramB < foo2.paramB;
default:
return foo1.name < foo2.name;
}
}
int paramSorter;
};
int main()
{
std::vector<Foo> foo;
Sorter sorter;
sorter.paramSorter = 0;
// fill the vector
std::sort( foo.begin(), foo.end(), sorter );
}
Run Code Online (Sandbox Code Playgroud)
在任何给定的时刻,矢量都可以重新排序.该类还具有在分类器结构中使用的getter方法.
在向量中插入新元素的最有效方法是什么?
我的情况是:
我有一个网格(电子表格),它使用类的排序向量.在任何给定时间,可以重新排序向量,并且网格将相应地显示排序的数据.
现在我需要在向量/网格中插入一个新元素.我可以插入,然后重新排序然后重新显示整个网格,但这对于大网格来说效率非常低. …
STL中是否有分类容器?
我的意思是:我有一个std::vector<Foo>,Foo定制的类在哪里.我还有一个比较器,它将比较类的字段Foo.
现在,我在我的代码中的某个地方:
std::sort( myvec.begin(), myvec.end(), comparator );
Run Code Online (Sandbox Code Playgroud)
它将根据我在比较器中定义的规则对矢量进行排序.
现在我想在Foo该向量中插入一个class元素.如果可以的话,我想写一下:
mysortedvector.push_back( Foo() );
Run Code Online (Sandbox Code Playgroud)
会发生什么,矢量会根据比较器将这个新元素放到它的位置.
相反,现在我必须写:
myvec.push_back( Foo() );
std::sort( myvec.begin(), myvec.end(), comparator );
Run Code Online (Sandbox Code Playgroud)
这只是浪费时间,因为矢量已经排序,我需要的是适当地放置新元素.
现在,由于我的程序的性质,我不能使用,std::map<>因为我没有键/值对,只是一个简单的向量.
如果我使用stl::list,我再次需要在每次插入后调用sort.
我正在寻找一种方法来获取 Oracle DB Server 版本作为“XYZ”。
我可以从这里使用查询,但它会显示不仅仅是服务器的版本。
我可以使用v$version视图,但生成的字符串将包含的不仅仅是“XYZ”。
有没有一种简单的方法可以得到我想要的东西?
我有一个看起来像这样的函数:
void myclass::myfunc()
{
int i;
for( std::vector<Foo>::iterator it = var.begin(), i = 0; it < var.end(); it++, i++ )
{
/* ... */
}
}
Run Code Online (Sandbox Code Playgroud)
我收到这个错误:
无法转换
int为std::_Vector_iterator<>
这段代码有什么问题?
所有,
作为建议在这里我需要做一个可绘制出我的位图.但是,当我试图使用:
Drawable d = new Drawable( my_bmp);
Run Code Online (Sandbox Code Playgroud)
它表明这个构造函数已被弃用,以支持:
Drawable(Bitmap bmp, int resourceId)
Run Code Online (Sandbox Code Playgroud)
我还能怎么做出来绘制的位图?
谢谢.
我有一组字符:\,/,?,%等.我也有一个字符串,让我们说"这是我的字符串%my string?"
我想检查字符串中是否存在任何字符.
这不是检查子字符串,而是检查集合中的字符.
我能做到这一点:
my_str.find( "/" ) or my_str.find( "\\" ) or my_str.find( "?" )
Run Code Online (Sandbox Code Playgroud)
但它非常丑陋且效率低下.
有没有更好的办法?
所有,
我试图将Borland C++代码转换为C#.在旧代码中,我看到以下内容:
double a = RoundTo( b, -2 );
Run Code Online (Sandbox Code Playgroud)
看看Borland文档,我看到RoundTo()接受正面和负面参数的精度.正数表示为10 ^ n,负数为10 ^ -n.
看看Math.RoundTo()的C#文档,我找不到它是否会接受负数来表示精度的参考.并且所有样本都带有正数.
在这种情况下转换代码的正确方法是什么?我应该忘记这个标志并写下:
double a = Math.Round( b, 2 );
Run Code Online (Sandbox Code Playgroud)
谢谢.
全部,
是否可以获得程序使用的 RichEdit 控件的版本?
| Version | Class name | Library | Shipped with | New features
|------------|---------------|--------------|-----------------|
| 1.0 | "RICHEDIT" | Riched32.dll | Windows 95 |
| 2.0 | "RichEdit20W" | Riched20.dll | Windows 98 | ITextDocument
| 3.0 | "RichEdit20W" | Riched20.dll | Windows 2000 | ITextDocument2
| 3.1 | "RichEdit20W" | Riched20.dll | Server 2003 |
| 4.1 | "RICHEDIT50" | Msftedit.dll | Windows XP SP1 | tomApplyTmp
| 7.5 | "RICHEDIT50" | Msftedit.dll | Windows …Run Code Online (Sandbox Code Playgroud) 在Cocoa上看起来有很多方法可以将文件/文件夹目录移动到垃圾箱:
通过阅读此处的解释或官方Apple文档的链接,了解区别是很好的.
此外,如果有人知道将文件/非空目录移动到垃圾箱的通用方法,那么很高兴知道.
所有,
我写了一个简单的SAX XML解析器.它工作,我用本地XML文件测试它.这是我的代码:
SAXParserFactory spf = SAXParserFactory.newInstance();
XMLParser xmlparser = null;
try
{
SAXParser parser = spf.newSAXParser();
XMLReader reader = parser.getXMLReader();
xmlparser = new XMLParser();
reader.setContentHandler( xmlparser );
reader.parse( new InputSource( getResources().openRawResource( R.raw.categories ) ) );
Run Code Online (Sandbox Code Playgroud)
现在我需要从网站上读取这个XML文件.我正在尝试的代码是:
public InputStream getXMLFile()
{
URL url = new URL("http://example.com/test.php?param=0");
InputStream stream = url.openStream();
Document doc = docBuilder.parse(stream);
}
reader.parse( new Communicator().getXMLFile() );
Run Code Online (Sandbox Code Playgroud)
我收到了编译错误
"方法解析(InputSource)不适用于参数(InputStream)".
我需要帮助搞清楚我需要什么.
谢谢.