我一直在阅读关于C++的书中的STL容器,特别是关于STL及其容器的部分.现在我明白了每一个都有自己的特定属性,而且我已经接近记住了所有这些...但我还没有掌握的是在哪种情况下使用它们.
解释是什么?示例代码是更受欢迎的.
在这个问题中如何在C++ 11中有效地选择标准库容器?是一个在选择C++集合时使用的方便流程图.
我认为这对于那些不确定他们应该使用哪个集合的人来说是一个有用的资源,所以我试图找到类似Java的流程图而无法这样做.
什么资源和"备忘单"可以帮助人们选择在Java编程时使用的正确的集合?人们如何知道应该使用哪些List,Set和Map实现?
我偶然发现了这个问题:我似乎无法在正常的索引位置选择项目std::set.这是性病的一个错误吗?
下面一个简单的例子:
#include <iostream>
#include <set>
int main()
{
std::set<int> my_set;
my_set.insert(0x4A);
my_set.insert(0x4F);
my_set.insert(0x4B);
my_set.insert(0x45);
for (std::set<int>::iterator it=my_set.begin(); it!=my_set.end(); ++it)
std::cout << ' ' << char(*it); // ups the ordering
//int x = my_set[0]; // this causes a crash!
}
Run Code Online (Sandbox Code Playgroud)
我能做些什么来解决这个问题?
我正在尝试D3DXMATRIXA16像这样创建一个向量:vector<D3DXMATRIXA16> matrices;我收到错误:
Run Code Online (Sandbox Code Playgroud)d:\Program Files\Microsoft Visual Studio 9.0\VC\include\vector(717) :错误C2719:'_ VAL':带__declspec的形式参数(对齐('16'))将不对齐
Run Code Online (Sandbox Code Playgroud)e:\projects\emuntitled\em\emscratch\emshadow.h(60) ::请参阅使用[_Ty = D3DXMATRIXA16]编译的类模板实例化'std :: vector <_Ty>'的引用
为什么呢?
谢谢你的帮助!
回到C++之前的11天,许多书籍作者建议在需要deque随机访问的动态大小容器的情况下使用.这部分是由于deque移动多功能数据结构的事实vector,但也是因为vector在C++之前的11世界中没有提供通过"缩小到"来缩小其容量的便捷方式.适合." 更大deque的间接访问通过支架操作元素和迭代的开销似乎受到了较大被包含vector再分配的开销.
另一方面,有些事情没有改变.vector仍然使用几何(即,尺寸*因子)方案进行重新分配,并且stil必须将其所有元素复制(或移动,如果可能)到新分配的空间中.vector关于在前部和/或中部插入/移除元件,它仍然是相同的.另一方面,它提供了更好的引用局部性,尽管如果使用的块deque是"良好的大"大小,那么对于许多应用程序来说,可以为缓存带来好处.
所以,我的问题是,如果根据C++ 11带来的变化,deque应继续保持转向/首选容器的动态大小/随机访问需求.
在C++中,列表数据结构具有合并功能,该功能基本上删除源列表中的所有对象并放入目标列表.
// source list will be empty after this operation
destinationList.merge(sourceList);
Run Code Online (Sandbox Code Playgroud)
根据教程/示例,必须在合并操作之前对列表进行排序.
destinationList.sort();
sourceList.sort();
destinationList.merge(sourceList);
Run Code Online (Sandbox Code Playgroud)
我很困惑,因为如果需要排序列表,为什么C++不会通过在合并函数中调用sort函数来强制执行它?
另外一件事,我可以先合并未排序的列表,然后我可以对合并列表进行排序,是不是也一样?
destinationList.merge(sourceList);
destinationList.sort();
Run Code Online (Sandbox Code Playgroud) 我想知道为什么会用std::unordered_multiset。我的猜测是它与插入/擦除后迭代器的无效或非无效有关,但也许更深层吗?非常相似的问题在这里:std :: multimap的用例,但更多是关于地图的讨论。
所以,我有一个关于C++的问题.让我们说我有一个游戏的敌人类.我希望能够(在理论上)在我的游戏中拥有无数的敌人.所以我必须有每个类的多个实例,我需要能够分别访问它们.我是否必须拥有一组具有无限量空间的敌人对象,我会使用new和delete运算符来创建和删除阵列中的敌人?然后我需要一个变量来保持敌人的数量,对吧?
我正在试验一个游戏程序。我正在尝试生成随机数量的项目。该代码将多次生成相同的项目。我可以设置一系列 switch 语句,这些语句将产生多个搜索区域供玩家查看,从而每个区域获得一个新的随机项目,但我想学习如何处理我的问题这里做错了。没有什么比错误更能帮助人们学习。
我正在使用结构体、链表、类和指针。
//genItem.h
#pragma once
struct item
{
char itemName[50];
int itemDamage;
int itemStability;
item* Next;
};
class genItem
{
public:
genItem(void);
~genItem(void);
int count();
int add_item(item* currentItem);
void generate_item(int d2, int s2);
item *Head;
item *Retrieve(int pos);
private:
int size;
int damage;
int stability;
};
//genItem.cpp
#include <iostream>
#include "genItem.h"
#include <stdio.h> // NEED THIS FOR NULL TO WORK
#include <ctime>
using namespace std;
genItem::genItem(void)
:size(0), Head(NULL)
{
}
genItem::~genItem(void)
{
}
int genItem::count()
{
return size; …Run Code Online (Sandbox Code Playgroud) 当我制作2D矢量时.
std::vector<std::vector<Pokemon>> pokemons;
我可以马上运行吗:
Pokemon pikachu = ...
pokemons[23].push_back(Pikachu);
或者我需要:
pokemons.reserve(100);
for (int i =0;i<100;i++) pokemons.push_back(vector<Pokemon>());
谢谢
我想知道是否有更适合我的需求的结构.
我需要一本字典或字符串(单词).我需要知道的是,如果给定的单词在字典中.
制作字符串,字符串的映射似乎浪费了内存.有没有更好的办法?
谢谢