我是C++领域的C/Python程序员,第一次使用STL.
在Python中,使用另一个列表扩展列表使用以下.extend方法:
>>> v = [1, 2, 3]
>>> v_prime = [4, 5, 6]
>>> v.extend(v_prime)
>>> print(v)
[1, 2, 3, 4, 5, 6]
Run Code Online (Sandbox Code Playgroud)
我目前使用这种算法方法在C++中扩展向量:
v.resize(v.size() + v_prime.size());
copy(v_prime.begin(), v_prime.end(), v.rbegin());
Run Code Online (Sandbox Code Playgroud)
这是扩展向量的规范方法,还是有一种我更缺失的简单方法?
我熟悉矢量的数学/物理概念作为幅度和方向,但我也在编程的上下文中不断引用向量(例如C++似乎有一个stl :: vector库出现了经常在SO).
我从上下文中得到的直觉是,它们是一个相当原始的构造,最常用于表示可变长度数组的行(按照我认为的大小存储它的大小),但是如果有人可以的话,它会非常有用为我提供了更完整的解释,最好包括它们在实践中的使用方式和原因.
我正在对一段代码进行快速性能测试
void ConvertToFloat( const std::vector< short >& audioBlock,
std::vector< float >& out )
{
const float rcpShortMax = 1.0f / (float)SHRT_MAX;
out.resize( audioBlock.size() );
for( size_t i = 0; i < audioBlock.size(); i++ )
{
out[i] = (float)audioBlock[i] * rcpShortMax;
}
}
Run Code Online (Sandbox Code Playgroud)
我很高兴原来非常天真的实现速度超过1毫秒来处理65536个音频样本.
然而,只是为了好玩,我尝试了以下
void ConvertToFloat( const std::vector< short >& audioBlock,
std::vector< float >& out )
{
const float rcpShortMax = 1.0f / (float)SHRT_MAX;
out.reserve( audioBlock.size() );
for( size_t i = 0; i < audioBlock.size(); i++ )
{
out.push_back( (float)audioBlock[i] …Run Code Online (Sandbox Code Playgroud) 我有以下向量:
tmp3 <- c("1500 2", "1500 1", "1510 2", "1510 1", "1520 2", "1520 1", "1530 2",
"1530 1", "1540 2", "1540 1")
Run Code Online (Sandbox Code Playgroud)
我想在这个向量的每个原子中保留第二个数字,所以它会读取:
c(2,1,2,1,2,1,2,1,2,1)
Run Code Online (Sandbox Code Playgroud) 对于由IEEE 32位浮点数组成的散列2d和3d向量,有什么好的散列函数(快速,良好的分布,很少的碰撞).我假设一般的3d向量,但假设法线(始终在[-1,1])的算法也是受欢迎的.我也不担心比特操纵,因为IEEE浮动也是IEEE浮动.
另一个更普遍的问题是散列Nd浮点向量,其中N非常小(3-12)并且是常量但在编译时不知道.目前我只是将这些花车作为uint并将它们混合在一起,这可能不是最好的解决方案.
我们给出了一系列数字,作为向量foo.任务是找到的foo是单调递增的 -每一个项目是否小于或等于下一个-或单调递减 -每个项目大于或小于下一个平等的.
当然,这可以通过循环找到,但更有创意吗?
我有一个带有std :: vector数据成员的类,例如
class foo{
public:
const std::vector<int> getVec(){return myVec;} //other stuff omitted
private:
std::vector<int> myVec;
};
Run Code Online (Sandbox Code Playgroud)
现在在我的主要代码的某些部分,我试图迭代这样的向量:
std::vector<int>::const_iterator i = myFoo.getVec().begin();
while( i != myFoo.getVec().end())
{
//do stuff
++i;
}
Run Code Online (Sandbox Code Playgroud)
我到达这个循环的那一刻,我得到了上述错误.
考虑std::vector v的N因素,并认为n第一要素已经整理与n < N何(N-n)/N很小:

有没有一种聪明的方法使用STL算法来比这更完整地对这个向量进行排序std::sort(std::begin(v), std::end(v))?
编辑:澄清:(Nn)未排序的元素应插入已排序的n个第一个元素中的正确位置.
EDIT2:奖金问题:以及如何找到n?(对应于第一个未排序的元素)
随着新的Android支持更新,矢量drawables获得向后兼容性.我有一个带有各种路径的矢量图像.我希望通过单击按钮或基于输入值以编程方式更改路径的颜色.是否可以访问矢量路径的name参数?然后改变颜色.
甚至可以在Rust中连接向量吗?如果是这样,有没有一种优雅的方式呢?我有这样的事情:
let mut a = vec![1, 2, 3];
let b = vec![4, 5, 6];
for val in &b {
a.push(val);
}
Run Code Online (Sandbox Code Playgroud)
有谁知道更好的方法?