Questions tagged «vector»

向量是一维数组:它包含可以使用整数索引访问的组件。在某些语言中,矢量的大小可以根据需要增大或缩小,以适应创建矢量后添加和删除项目的需要。使用“矢量图形”进行图形显示。

2
如何将向量变成R中的矩阵?
我有一个带有49个数值的向量。我想改用7x7的数字矩阵。 我可以使用某种方便的自动转换语句,还是必须将7个正确的向量子集的单独列分配给新矩阵?我希望有类似的东西c(myMatrix),当然可以选择给出我想要的行数和/或列数。
70 r  vector  matrix 



2
添加到std :: vector时类字段的行为异常
在以下情况下,我发现了一些非常奇怪的行为(在clang和GCC上)。我有一个向量,nodes有一个元素,一个class的实例Node。然后,我在上调用一个函数nodes[0],Node以向向量添加新的函数。添加新节点后,将重置调用对象的字段!但是,一旦功能完成,它们似乎又恢复正常。 我相信这是一个最小的可复制示例: #include <iostream> #include <vector> using namespace std; struct Node; vector<Node> nodes; struct Node{ int X; void set(){ X = 3; cout << "Before, X = " << X << endl; nodes.push_back(Node()); cout << "After, X = " << X << endl; } }; int main() { nodes = …

6
使用std :: vector :: swap方法在C ++中交换两个不同的向量是否安全?
假设您具有以下代码: #include <iostream> #include <string> #include <vector> int main() { std::vector<std::string> First{"example", "second" , "C++" , "Hello world" }; std::vector<std::string> Second{"Hello"}; First.swap(Second); for(auto a : Second) std::cout << a << "\n"; return 0; } 假设向量不是std::string,但是类: std::vector<Widget> WidgetVector; std::vector<Widget2> Widget2Vector; 用该std::vector::swap方法交换两个向量是否仍然安全:WidgetVector.swap(Widget2Vector);否则将导致UB?
30 c++  c++11  vector  stdvector  swap 

3
在两个范围内以降序对向量排序
假设我有一个整数向量: std::vector<int> indices; for (int i=0; i<15; i++) indices.push_back(i); 然后我按降序对其进行排序: sort(indices.begin(), indices.end(), [](int first, int second) -> bool{return indices[first] > indices[second];}) for (int i=0; i<15; i++) printf("%i\n", indices[i]); 这将产生以下结果: 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 现在,我想将数字3、4、5和6移到末尾,并保持它们的降序(最好不必sort第二次使用)。即,这就是我想要的: 14 13 12 11 10 …

2
向量作为键在C ++内部如何工作?
该SO回答说,带有向量作为密钥的STL映射,该向量可用作密钥。因此,当我们使用向量作为键时。由于键需要唯一,因此该键实际如何工作,因此当我们插入具有相同元素的另一个向量时,将map检查逐个元素重复还是向量名称确实指定了某些东西?就像数组的名称代表基地址一样。因此,可以将数组用作键,因为在这种情况下基地址可以用作键,但是在向量的情况下,键是什么。它是如何在内部工作的。 因为当我打印矢量的名称时,我确实得到了一个错误 vector<int> v; cout<<v; //error
14 c++  arrays  dictionary  vector  stl 

1
我可以通过元素的完美转发来列表初始化std :: vector吗?
我注意到std :: vector的聚合 列表初始化在以下情况下执行复制初始化移动更适用。同时,多个emplace_backs可以满足我的需求。 我只能提出编写模板函数的不完善解决方案init_emplace_vector。但是,它仅对非显式单值构造函数最佳。 template <typename T, typename... Args> std::vector<T> init_emplace_vector(Args&&... args) { std::vector<T> vec; vec.reserve(sizeof...(Args)); // by suggestion from user: eerorika (vec.emplace_back(std::forward<Args>(args)), ...); // C++17 return vec; } 题 我真的需要使用emplace_back来尽可能高效地初始化std :: vector吗? // an integer passed to large is actually the size of the resource std::vector<large> v_init { …


2
原子向量的初始化
考虑: void foo() { std::vector<std::atomic<int>> foo(10); ... } foo的内容现在有效吗?还是我需要显式循环并初始化它们?我检查了Godbolt,它看起来还不错,但是在这一点上,该标准似乎很混乱。 所述的std ::矢量构造器表示,它插入默认插入的实例std::atomic<int>,这是初始化值经由放置new。 我认为这种价值初始化的效果适用: 2)如果T是具有默认构造函数的类类型,该构造函数既不是用户提供也不是未删除的(也就是说,它可能是带有隐式定义或默认默认构造函数的类),则将该对象初始化为零,然后将其如果具有非平凡的默认构造函数,则默认初始化; 因此在我看来,原子是零初始化的。所以问题是,是否std::atomic<int>在有效对象中对结果进行零初始化? 我猜答案是“在实践中是,但没有真正定义”? 注意:此答案同意它是零初始化的,但是并没有真正说明是否意味着该对象有效。
12 c++  vector  atomic 


7
删除向量中的元素不起作用
我有一个向量。我需要删除其中的最后3个元素。描述了这种逻辑。程序崩溃。可能是什么错误? vector<float>::iterator d = X.end(); for (size_t i = 1; i < 3; i++) { if (i == 1) X.erase(d); else X.erase(d - i); }
10 c++  vector 

2
如何使用SWIG将numpy数组转换为vector <int>&(reference)
我的目标: 在python中创建3个numpy数组(其中2个将使用特定的值初始化),然后通过swig将所有三个数组发送到c ++函数中作为矢量引用(这是为了避免复制数据和失去效率)。进入c ++函数后,将两个数组相加,然后将它们的总和放在第三个数组中。 vec_ref.h #include &lt;vector&gt; #include &lt;iostream&gt; void add_vec_ref(std::vector&lt;int&gt;&amp; dst, std::vector&lt;int&gt;&amp; src1, std::vector&lt;int&gt;&amp; src2); vec_ref.cpp #include "vec_ref.h" #include &lt;cstring&gt; // need for size_t #include &lt;cassert&gt; void add_vec_ref(std::vector&lt;int&gt;&amp; dst, std::vector&lt;int&gt;&amp; src1, std::vector&lt;int&gt;&amp; src2) { std::cout &lt;&lt; "inside add_vec_ref" &lt;&lt; std::endl; assert(src1.size() == src2.size()); dst.resize(src1.size()); for (size_t i = 0; …
10 python  c++  numpy  vector  swig 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.