vector<int> l;
for(int i=1;i<=10;i++){
l.push_back(i);
}
Run Code Online (Sandbox Code Playgroud)
现在,例如,如何5th element将矢量更改为-1?
我试过l.assign(4, -1);
它的表现并不像预期的那样.其他矢量方法似乎都不合适.
我使用了矢量,因为我需要在我的代码中使用随机访问功能(使用l.at(i)).
如果我在向量上使用.reserve(items),向量将分配足够的内存来猜测我需要的项目数.
如果我以后使用.clear(),那么只清除向量还是保存我之前定义的保留?
谢谢.
为了获得中心,我已经尝试为每个顶点添加总数,除以顶点数.
我也试图找到最顶端,最底部 - >获得中点...找到最左边,最右边,找到中点.
这两个都没有返回完美的中心,因为我依靠中心来缩放多边形.
我想缩放我的多边形,所以我可以在它们周围放置一个边框.
找到多边形的质心的最佳方法是多边形可能是凹的,凸的并且有许多不同长度的边?
我正在为一段返回大型数组的C代码制作一个C++包装器,所以我试图将数据返回到vector<unsigned char>.
现在问题是,数据大小为兆字节,并且vector不必要地初始化其存储,这实际上是将我的速度降低了一半.
我该如何防止这种情况?
或者,如果不可能 - 是否有其他STL容器可以避免这种不必要的工作?或者我最终必须制作自己的容器?
(预C++ 11)
我将矢量作为输出缓冲区传递.我不是从其他地方复制数据.
它是这样的:
vector<unsigned char> buf(size); // Why initialize??
GetMyDataFromC(&buf[0], buf.size());
Run Code Online (Sandbox Code Playgroud) 我需要将多行两列data.frame转换为命名字符向量.我data.frame会是这样的:
dd = data.frame(crit = c("a","b","c","d"),
name = c("Alpha", "Beta", "Caesar", "Doris")
)
Run Code Online (Sandbox Code Playgroud)
我真正需要的是:
whatiwant = c("a" = "Alpha",
"b" = "Beta",
"c" = "Caesar",
"d" = "Doris")
Run Code Online (Sandbox Code Playgroud) 我明白那个:
atan2(vector.y, vector.x)= 矢量和X轴之间的角度.
但我想知道如何使用atan2 获得两个向量之间的角度.所以我遇到了这个解决方案:
atan2(vector1.y - vector2.y, vector1.x - vector2.x)
Run Code Online (Sandbox Code Playgroud)
我的问题很简单:
以下两个公式会产生相同的数字吗?
atan2(vector1.y - vector2.y, vector1.x - vector2.x)
atan2(vector2.y - vector1.y, vector2.x - vector1.x)
如果不是:我怎么知道减法中哪个矢量首先出现?
谢谢
当函数涉及重新分配时,我发现一些编译器可能在函数调用之前保存地址.它导致存储在无效地址中的返回值.
在上面的描述中有一个例子来解释行为.
#include <stdio.h>
#include <vector>
using namespace std;
vector<int> A;
int func() {
A.push_back(3);
A.push_back(4);
return 5;
}
int main() {
A.reserve(2);
A.push_back(0);
A.push_back(1);
A[1] = func();
printf("%d\n", A[1]);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
有一些常见的C++编译器,测试结果如下.
155是不确定的行为?
我有一个std::vector与n元素.现在我需要将指针传递n-1给具有函数最后元素的向量.
例如,我的vector<int> foo包含(5,2,6,87,251).一个函数需要vector<int>*,我想传递一个指针(2,6,87,251).
我可以(安全地)获取迭代器++foo.begin(),将其转换为指针并将其传递给函数吗?还是用&foo[1]?
更新:人们建议我改变我的函数来获取迭代器而不是指针.在我的情况下,这似乎是不可能的,因为我提到的find功能是...的功能unordered_set<std::vector*>.那么在这种情况下,是将n-1元素复制foo到一个新的向量中并find使用指向该唯一选项的指针进行调用?非常低效!这就像画家Shlemiel,特别是因为我必须查询许多子集:最后一个n-1,然后n-2等等元素,看看它们是否在unordered_set.
我想知道两者之间有什么不同.我注意到emplace是c ++ 11的补充.那为什么要加?