Tag: stl

为什么从函数返回向量是可以的?

请考虑这个代码,我已经看了几次这种types的代码, words是本地向量,怎么可能从函数返回。 我们可以保证它不会死? std::vector<std::string> read_file(const std::string& path) { std::ifstream file("E:\\names.txt"); if (!file.is_open()) { std::cerr << "Unable to open file" << "\n"; std::exit(-1); } std::vector<string> words;//this vector will be returned std::string token; while (std::getline(file, token, ',')) { words.push_back(token); } return words; }

gcc std :: unordered_map实现缓慢吗? 如果是这样 – 为什么?

我们正在用C ++开发一个高性能的关键软件。 在那里我们需要一个并发哈希映射并实现一个。 所以我们写了一个基准来计算出我们的并发哈希映射与std::unordered_map相比要慢多less。 但是, std::unordered_map似乎是非常慢…所以这是我们的微基准(对于并发映射,我们产生了一个新的线程,以确保locking不会被优化,注意我从来没有inser 0,因为我也基准google::dense_hash_map ,需要一个空值): boost::random::mt19937 rng; boost::random::uniform_int_distribution<> dist(std::numeric_limits<uint64_t>::min(), std::numeric_limits<uint64_t>::max()); std::vector<uint64_t> vec(SIZE); for (int i = 0; i < SIZE; ++i) { uint64_t val = 0; while (val == 0) { val = dist(rng); } vec[i] = val; } std::unordered_map<int, long double> map; auto begin = std::chrono::high_resolution_clock::now(); for (int i = 0; […]

std :: make_pair与std :: pair的构造函数的目的是什么?

std::make_pair的目的是什么? 为什么不只是做std::pair<int, char>(0, 'a') ? 这两种方法有什么区别?

如何反转C ++向量?

在C ++中是否有一个内置的vector函数来反转一个vector? 或者你只需​​要手动?

迭代器>第二个是什么意思?

在C ++中, std::map<>::iterator的types是什么? 我们知道std::map<A,B>::iteratortypes的对象有一个重载operator -> ,它返回一个std::pair<A,B>* ,并且std::pair<> first和second成员。 但是,这两个成员是相对应的,为什么我们必须访问存储在地图中的值呢?

如何检查如果std :: map包含一个没有插入的键?

我发现检查重复的唯一方法是通过插入和检查std::pair.second为false ,但问题是,这仍然插入的东西,如果密钥是未使用的,而我想要的是一个map.contains(key); function。

迭代时从STL集中删除元素

我需要通过一个集合并删除满足预定义条件的元素。 这是我写的testing代码: #include <set> #include <algorithm> void printElement(int value) { std::cout << value << " "; } int main() { int initNum[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; std::set<int> numbers(initNum, initNum + 10); // print '0 1 2 3 4 5 6 7 8 9' std::for_each(numbers.begin(), numbers.end(), printElement); […]

快速的方法来复制一个向量到另一个

我更喜欢两种方式: void copyVecFast(const vec<int>& original) { vector<int> newVec; newVec.reserve(original.size()); copy(original.begin(),original.end(),back_inserter(newVec)); } void copyVecFast(vec<int>& original) { vector<int> newVec; newVec.swap(original); } 你怎么做呢?

迭代通过std :: map的顺序是否已知(并由标准保证)?

我的意思是 – 我们知道std::map的元素是根据键来sorting的。 所以,假设键是整数。 如果我使用for来从std::map::begin()迭代到std::map::end() ,那么标准保证我将通过带有键的元素迭代,按照升序sorting? 例: std::map<int, int> map_; map_[1] = 2; map_[2] = 3; map_[3] = 4; for( std::map<int, int>::iterator iter = map_.begin(); iter != map_.end(); ++iter ) { std::cout << iter->second; } 这是保证打印234还是它的实现定义? 真实的原因:我有一个std::map int键。 在非常罕见的情况下,我想遍历所有元素,大于一个具体的int值。 是的,这听起来像std::vector将是更好的select,但注意到我的“非常罕见的情况下”。 编辑 :我知道, std::map的元素是sorting..没有必要指出(大部分的答案在这里)。 我甚至写在我的问题。 当我迭代一个容器时,我正在询问迭代器和顺序。 谢谢@Kerrek SB的答案。

是std ::向量复制与push_back对象?

经过与valgrind的很多调查后,我已经得出结论,std :: vector做了一个你想push_back对象的副本。 这是真的吗? 一个向量不能保留一个对象的引用或指针,而没有副本? 谢谢