标签: vector

如何更改C++ STL向量的特定元素

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)).

c++ stl vector

45
推荐指数
4
解决办法
11万
查看次数

调用std :: vector :: clear()会将std :: vector :: capacity()设置为零吗?

如果我在向量上使用.reserve(items),向量将分配足够的内存来猜测我需要的项目数.

如果我以后使用.clear(),那么只清除向量还是保存我之前定义的保留?

谢谢.

c++ stl vector

45
推荐指数
3
解决办法
2万
查看次数

找到多边形的质心?

为了获得中心,我已经尝试为每个顶点添加总数,除以顶点数.

我也试图找到最顶端,最底部 - >获得中点...找到最左边,最右边,找到中点.

这两个都没有返回完美的中心,因为我依靠中心来缩放多边形.

我想缩放我的多边形,所以我可以在它们周围放置一个边框.

找到多边形的质心的最佳方法是多边形可能是凹的,凸的并且有许多不同长度的边?

c c++ vector vector-graphics

45
推荐指数
3
解决办法
6万
查看次数

*不*初始化其成员的C++向量?

我正在为一段返回大型数组的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)

c++ stl vector

45
推荐指数
2
解决办法
3175
查看次数

将数据框的两列转换为命名向量

我需要将多行两列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)

r vector coercion dataframe

45
推荐指数
5
解决办法
1万
查看次数

使用atan2找到两个向量之间的角度

我明白那个:

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)

如果不是:我怎么知道减法中哪个矢量首先出现?

谢谢

math geometry vector

45
推荐指数
4
解决办法
9万
查看次数

当C++将元素从函数的返回值存储到std :: vector时出现意外的结果

当函数涉及重新分配时,我发现一些编译器可能在函数调用之前保存地址.它导致存储在无效地址中的返回值.

在上面的描述中有一个例子来解释行为.

#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++编译器,测试结果如下.

  • GCC(GNU编译器集合):运行时错误或输出 1
  • Clang:输出 5
  • VC++:输出 5

是不确定的行为?

c++ gcc vector compiler-optimization compiler-bug

45
推荐指数
1
解决办法
1866
查看次数

将迭代器转换为指针?

我有一个std::vectorn元素.现在我需要将指针传递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.

c++ pointers iterator stl vector

44
推荐指数
3
解决办法
9万
查看次数

C++ - 未初始化的向量<int>的值

我从答案明白这个问题 是全局/静态初始化为int值将为0回答这一说,对向量,对象类型的默认构造函数将被调用.

我无法弄清楚 - 当我vector<int> v(10)在本地函数中时会发生什么 .int的默认构造函数是什么?如果我在vector<int> v(10)全球宣布怎么办?

我所看到的是, vector<int> v(10)在本地函数中导致变量为0 - 但我不确定这是因为我的编译器还是固定的预期行为.

c++ scope initialization vector

44
推荐指数
3
解决办法
5万
查看次数

C++ std :: vector emplace vs insert

我想知道两者之间有什么不同.我注意到emplace是c ++ 11的补充.那为什么要加?

c++ stl vector

44
推荐指数
2
解决办法
4万
查看次数