我有一个指向对象的向量.我需要从向量中删除一个元素并将该元素放在另一个列表中.
我读到擦除可以用来从向量中删除对象,但我还读到它在执行之前调用对象析构函数.
我需要知道擦除对象是否也会破坏它.
如果我想std::vector用SSE 处理数据,我需要16字节对齐.我怎样才能做到这一点?我需要编写自己的分配器吗?或者默认分配器是否已经与16字节边界对齐?
在程序优化期间,尝试优化迭代遍历向量的循环,我发现以下事实::: std :: vector :: at()比operator []快得多!
在发布和调试版本(VS2008 x86)中,operator []比at()快5到10倍.
在网上读了一下让我意识到at()有边界检查.好的,但是,将操作放慢了10倍?!
有什么理由吗?我的意思是,边界检查是一个简单的数字比较,还是我错过了什么?
问题是这种性能受损的真正原因是什么?
更进一步,有没有办法让它更快?
我肯定会在其他代码部分(我已经有自定义边界检查!)中将所有at()调用与[]交换.
概念证明:
#define _WIN32_WINNT 0x0400
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <conio.h>
#include <vector>
#define ELEMENTS_IN_VECTOR 1000000
int main()
{
__int64 freq, start, end, diff_Result;
if(!::QueryPerformanceFrequency((LARGE_INTEGER*)&freq))
throw "Not supported!";
freq /= 1000000; // microseconds!
::std::vector<int> vec;
vec.reserve(ELEMENTS_IN_VECTOR);
for(int i = 0; i < ELEMENTS_IN_VECTOR; i++)
vec.push_back(i);
int xyz = 0;
printf("Press any key to start!");
_getch();
printf(" Running speed test..\n");
{ // at() …Run Code Online (Sandbox Code Playgroud) 我有一个类似于这个的功能:
isGoodNumber <- function(X)
{
if (X==5) return(TRUE) else return(FALSE)
}
I have a vector:
v<-c(1,2,3,4,5,5,5,5)
Run Code Online (Sandbox Code Playgroud)
我想获得一个包含vwhere 的元素的新向量isGoodNumber(v) == TRUE
我该怎么做呢 ?
尝试v [ isGoodNumber(v) == TRUE ]但它不起作用:-)
谢谢 !!
如何将一些元素从第一个向量移动到第二个向量,元素将从第一个向量中删除?
如果我使用std::move,元素不会从第一个向量中删除.
这是我写的代码:
move(xSpaces1.begin() + 7, xSpaces1.end(), back_inserter(xSpaces2));
Run Code Online (Sandbox Code Playgroud) 我有分类文本的语料库.从这些我创建矢量.每个向量对应一个文档.矢量分量是本文档中的字权重,计算为TFIDF值.接下来,我构建一个模型,其中每个类都由一个向量表示.模型具有与语料库中的类一样多的向量.模型矢量的分量被计算为取自该类中矢量的所有分量值的平均值.对于未分类的矢量,我通过计算这些矢量之间的余弦来确定与模型矢量的相似性.
问题:
1)我可以使用未分类和模型向量之间的欧几里德距离来计算它们的相似性吗?
2)为什么欧几里德距离不能用作相似度量而不是两个矢量之间的角度余弦,反之亦然?
谢谢!
说,我有一个
std::vector<SomeClass *> v;
Run Code Online (Sandbox Code Playgroud)
在我的代码中,我需要经常在程序中访问它的元素,向前和向后循环它们.
这两者之间的访问类型最快?
迭代器访问:
std::vector<SomeClass *> v;
std::vector<SomeClass *>::iterator i;
std::vector<SomeClass *>::reverse_iterator j;
// i loops forward, j loops backward
for( i = v.begin(), j = v.rbegin(); i != v.end() && j != v.rend(); i++, j++ ){
// some operations on v items
}
Run Code Online (Sandbox Code Playgroud)
下标访问(按索引)
std::vector<SomeClass *> v;
unsigned int i, j, size = v.size();
// i loops forward, j loops backward
for( i = 0, j = size - 1; i < size && j >= …Run Code Online (Sandbox Code Playgroud) 为什么pop_frontC++中没有方法std::vector?
我一直在做基本程序来找到矢量的最大值,最小值,中值,方差,模式等.一切都很顺利,直到我进入模式.
我看到它的方式,我应该能够循环遍历向量,对于每个出现的数字,我在地图上增加一个键.找到具有最高值的密钥将是发生最多的密钥.与其他键相比,它会告诉我它是单个多重模式还是无模式答案.
这是导致我如此麻烦的代码块.
map<int,unsigned> frequencyCount;
// This is my attempt to increment the values
// of the map everytime one of the same numebers
for(size_t i = 0; i < v.size(); ++i)
frequencyCount[v[i]]++;
unsigned currentMax = 0;
unsigned checked = 0;
unsigned maax = 0;
for(auto it = frequencyCount.cbegin(); it != frequencyCount.cend(); ++it )
//checked = it->second;
if (it ->second > currentMax)
{
maax = it->first;
}
//if(it ->second > currentMax){
//v = it->first
cout << " The highest value …Run Code Online (Sandbox Code Playgroud) 我有一个矢量,我保存对象.我需要将其转换为设置.我一直在阅读关于集合的内容,但我仍然有几个问题:
如何正确初始化它?老实说,一些教程说初始化就好了set<ObjectName> something.其他人说你也需要一个迭代器,比如set<Iterator, ObjectName> something.
如何正确插入它们.再说一次,这就足够了something.insert(object)吗?
如何从set中获取特定对象(例如对象,其中包含名称变量,等于"ben")?
PS我有自己的转换矢量作为一个集(又名我必须使用集而不是矢量).只有set可以在我的代码中.
vector ×10
c++ ×8
performance ×2
stl ×2
alignment ×1
allocator ×1
dictionary ×1
distance ×1
function ×1
iterator ×1
max ×1
mode ×1
r ×1
set ×1
sse ×1
trigonometry ×1
visual-c++ ×1